CC ++ linux fork()和exec()

CC ++ linux fork()和exec(),第1张

概述C / C ++ linux fork()和exec()

我使用fork()来创buildsubprocess。 从subprocess我用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函数将打开文件,写入日志和closures文件。 (被刷新)ShellScript将会启动新的进程c / c ++。

我长期运行我的程序,上面的代码被多次调用。 有时(很less)有问题发生,虽然subprocess被成功创build(我仔细检查过),新进程无法启动成功。 有一件事是极端的误解,当这个问题发生时,虽然subprocess创build成功,但“subprocess”日志不能打印。

在正常情况下(没有错误发生),打印“subprocess”和“父进程”日志的次数是相同的。

使用IPython Notebook在windows上的类中使用multiprocessing.Pool

如何编程以便不同的进程在不同的cpu核上运行?

Python 3.2 Multiprocessing.Process没有运行目标函数

获取互斥量,偏好升级过程

Python多处理:在函数中调用pool.map

在不正常的情况下,虽然subprocess始终创build成功,但它们并不相同。在这种情况下,“启动进程失败”和“无法创buildsubprocess”日志不会被打印。 请帮我咨询一下。

杀死Python多处理池

为什么linux不使用光纤而不是先发制人的多任务处理?

linux bashmultithreading/处理小型作业

Python多处理在linux中工作,但不在windows中

在使用多处理时,在窗口中强制使用if __name __ ==“__ main__”

请记住, stdio(3)被缓冲。 总是调用fflush(NulL); (更多见fflush(3) )。 在每个printf(3)格式字符串的末尾添加一个n (换行符)(否则,按照fflush(NulL); …)。

函数execl(3) (也许你想execlp ?)可能会失败(所以在失败时设置errno )。

} else if (pID == 0) { printf("Child processn"); fflush(NulL); execl("/bin/foo","foo","arg1",NulL); // if we are here execl has Failed perror("Launch process fail"); }

错误时, fork(2)返回-1并设置errno(3) (另请参见perror(3)和strerror(3) )。 所以你的最后一个应该是

} else { perror("Can't create child process"); fflush(NulL); }

您可能想使用strace(1) (特别是strace -f yourprog …)来理解所涉及的系统调用 (请参阅syscalls(2) …)

您的WriteLog应该可能使用strerror (在WriteLog 开始时保存的errno值….)。 我建议像

voID WriteLog(const char* msg) { int e = errno; if (e) syslog (LOG_ERR,"%s [%s]",msg,strerrno(e)); else syslog (LOG_ERR,"%s",msg); }

参见syslog(3) 。

fork-ed进程的数量是有限制的,参见使用RliMIT_NPROC和bash ulimit内建的setrlimit(2) 。

另请阅读高级linux编程 。

总结

以上是内存溢出为你收集整理的C / C ++ linux fork()和exec()全部内容,希望文章能够帮你解决C / C ++ linux fork()和exec()所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1154053.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-01
下一篇 2022-06-01

发表评论

登录后才能评论

评论列表(0条)

保存