如何使用 Poco 进程在多个线程中启动具有不同参数的相同 linux 进程
How to launch the same linux process with different arguments in multiple threads with Poco process
当尝试使用不同的参数和 Poco::process
启动相同的 C++ Linux 程序时,我从我的第二个 DummyProcess 中获得了 exit 72 代码。
下面的代码片段在一个线程函数中执行,该函数每隔一段时间启动一次,具有不同的任务和持续时间参数。
当 task-1 为 运行 并且 task-2 想要启动时,它的 PID 被分配(不同于 task1 pid)并尝试启动。起初,Poco::Process::tryWait()
returns -1(这意味着 运行),但不久之后 returns 72 并且程序实际上并没有启动。
command="/DummyProcess";
args{"task","duration"};
Poco::ProcessHandle ph = Poco::Process::launch(command, args));
rc = ph.id();
在 main 中而不是在线程函数中执行此代码段并启动同一程序但使用两个 ProcessHandle 对象时一切正常。
此外,当进程不必同步工作时一切正常。
更具体地说:如果任务 1 在线程中启动并且它在任务 2 启动之前完成,那么任务 2 将按预期启动和运行。
我终于找到了答案。我无知地没有提到我在 windows 主机上的虚拟框中 运行 Linux 并且正在使用共享文件夹..
我注意到在启动可执行文件时,它的权限从 -rwx-rwx-rwx 更改为 -rw-rw-rw,我无法使用 chmod 更改它们。所以我注意到这里有些可疑,并将我的 DummyProcess 可执行文件移到了共享文件夹之外,现在一切都很好用。
当尝试使用不同的参数和 Poco::process
启动相同的 C++ Linux 程序时,我从我的第二个 DummyProcess 中获得了 exit 72 代码。
下面的代码片段在一个线程函数中执行,该函数每隔一段时间启动一次,具有不同的任务和持续时间参数。
当 task-1 为 运行 并且 task-2 想要启动时,它的 PID 被分配(不同于 task1 pid)并尝试启动。起初,Poco::Process::tryWait()
returns -1(这意味着 运行),但不久之后 returns 72 并且程序实际上并没有启动。
command="/DummyProcess";
args{"task","duration"};
Poco::ProcessHandle ph = Poco::Process::launch(command, args));
rc = ph.id();
在 main 中而不是在线程函数中执行此代码段并启动同一程序但使用两个 ProcessHandle 对象时一切正常。
此外,当进程不必同步工作时一切正常。 更具体地说:如果任务 1 在线程中启动并且它在任务 2 启动之前完成,那么任务 2 将按预期启动和运行。
我终于找到了答案。我无知地没有提到我在 windows 主机上的虚拟框中 运行 Linux 并且正在使用共享文件夹..
我注意到在启动可执行文件时,它的权限从 -rwx-rwx-rwx 更改为 -rw-rw-rw,我无法使用 chmod 更改它们。所以我注意到这里有些可疑,并将我的 DummyProcess 可执行文件移到了共享文件夹之外,现在一切都很好用。