当 main window 退出时,wxExecuted 进程没有被删除
wxExecuted process is not deleted when main window exits
我将 wxLua 与 wxWidgets 2.8.12 一起用于 Windows。在下面的代码中,我尝试异步执行一些命令并重定向其输出。
问题是,如果我在子进程终止之前关闭 main window,则子进程不会被删除。在这个 wxLua 应用程序退出后,我仍然可以在 Windows 任务管理器中看到 "tree.com" 进程。
我下面的代码有什么问题?
require("wx")
frame = wx.wxFrame(wx.NULL, wx.wxID_ANY, "Test")
function ExecCommand(cmd)
proc = wx.wxProcess(frame)
proc:Redirect()
pid = wx.wxExecute(cmd, wx.wxEXEC_ASYNC, proc)
if pid > 0 then
print("process id is " .. tostring(pid))
streamIn = proc and proc:GetInputStream()
end
end
function ReadStream()
if streamIn and streamIn:CanRead() then
local str = streamIn:Read(4096)
end
end
frame:Connect(wx.wxEVT_IDLE, ReadStream)
frame:Connect(wx.wxEVT_END_PROCESS, function(event)
proc = nil
end)
frame:Connect(wx.wxEVT_CLOSE_WINDOW, function(event)
if proc then proc:Detach() end
event:Skip()
end)
frame:Show(true)
cmd = "tree.com C:\Windows"
ExecCommand(cmd)
wx.wxGetApp():MainLoop()
您没有终止子进程,所以它会继续 运行,为什么不呢?如果您不希望这种情况发生,您需要 Kill()
明确使用它的 PID。
顺便说一句,也请更新到 wxWidgets 3.0,尤其是当您使用 Lua 时,不应该有任何兼容性问题,但您将使用具有许多新功能和与 10 岁以上的 2.8 相比,错误修复。
我将 wxLua 与 wxWidgets 2.8.12 一起用于 Windows。在下面的代码中,我尝试异步执行一些命令并重定向其输出。
问题是,如果我在子进程终止之前关闭 main window,则子进程不会被删除。在这个 wxLua 应用程序退出后,我仍然可以在 Windows 任务管理器中看到 "tree.com" 进程。
我下面的代码有什么问题?
require("wx")
frame = wx.wxFrame(wx.NULL, wx.wxID_ANY, "Test")
function ExecCommand(cmd)
proc = wx.wxProcess(frame)
proc:Redirect()
pid = wx.wxExecute(cmd, wx.wxEXEC_ASYNC, proc)
if pid > 0 then
print("process id is " .. tostring(pid))
streamIn = proc and proc:GetInputStream()
end
end
function ReadStream()
if streamIn and streamIn:CanRead() then
local str = streamIn:Read(4096)
end
end
frame:Connect(wx.wxEVT_IDLE, ReadStream)
frame:Connect(wx.wxEVT_END_PROCESS, function(event)
proc = nil
end)
frame:Connect(wx.wxEVT_CLOSE_WINDOW, function(event)
if proc then proc:Detach() end
event:Skip()
end)
frame:Show(true)
cmd = "tree.com C:\Windows"
ExecCommand(cmd)
wx.wxGetApp():MainLoop()
您没有终止子进程,所以它会继续 运行,为什么不呢?如果您不希望这种情况发生,您需要 Kill()
明确使用它的 PID。
顺便说一句,也请更新到 wxWidgets 3.0,尤其是当您使用 Lua 时,不应该有任何兼容性问题,但您将使用具有许多新功能和与 10 岁以上的 2.8 相比,错误修复。