【发布时间】:2014-03-12 12:06:25
【问题描述】:
我使用 fork() 创建子进程。从子进程我使用 exec() 启动新进程。我的代码如下:
......
pid = fork();
if (pid > 0) {
WriteLog("Parent Process");
//Do something
} else if (pid == 0) {
WriteLog("Child process");
int return = execl(ShellScript);
if ( return == -1 )
WriteLog("Launch process fail");
} else {
WriteLog("Can't create child process");
}
......
注意:WriteLog 函数将是打开文件、写入日志和关闭文件。 (它被冲洗了) ShellScript 将启动新进程 c/c++。
我长期运行我的程序,上面的代码被多次调用。有时(很少)会发生新进程无法成功启动的问题,尽管子进程创建成功(我已经仔细检查过)。有一点是非常误解的,当这个问题发生时,虽然子进程创建成功,但“子进程”日志却无法打印。
在正常情况下(不发生错误)“子进程”和“父进程”日志的打印次数是相同的。
在异常情况下,虽然子进程总是创建成功,但它们并不相同。这种情况下不会打印“启动进程失败”和“无法创建子进程”日志。 请帮我咨询。
【问题讨论】:
标签: c++ c linux multiprocessing