我没有在我的代码中处理SIGCHLD。终止后,我的流程仍会立即被删除。我希望它成为僵尸程序。如果我将SIGCHLD设置为SIGDFT,那么它会起作用吗?我如何将SIGCHLD设置为SIGDFT?我想要进程成为僵尸,所以我可以在waitpid之后读取父进程中的子进程。什么是信号(SIGCHLD,SIG_DFL);意思?
2
A
回答
5
从你的问题记录,你似乎被捆绑在自己在这个结。下面是它如何工作的概要:
SIGCHLD的默认处置是忽略。换句话说,如果你什么都不做,信号被忽略,但僵尸存在于进程表中。这就是为什么你可以在孩子死后的任何时候在
wait
上。如果您设置了一个信号处理程序,那么信号就会被传送,您可以根据需要收割它,但(之前的)孩子在死亡和收获之间仍然是僵尸。
如果手动集SIGCHLD的性格通过
signal
SIG_IGN那么语义是比他们在项目1.当您手动设置此配置的操作系统将立即从进程表中的孩子,当它死有一点不同和不是创建一个僵尸。因此,不再有任何状态信息收获,并且wait
将因ECHILD而失败。 (Linux内核2.6.9后坚持这种行为。)
0
因此,您的最终目标是在您的子进程退出后读取父进程中的返回代码?我不认为这与信号有任何关系。一些示例代码:
short pid;
if((pid == fork()) == 0) {
// Child process do some thing here.
exit(n);
} else {
int returnCode;
while(pid != wait(&returnCode));
// the child has terminated with returnCode
// wait is blocking system call so u don't need to worry about busy waiting.
}
相关问题
- 1. &符号是什么意思?
- 2. 冒号是什么意思?
- 3. 问号是什么意思?
- 4. 符号“⊇”是什么意思?
- 5. 是什么意思:是什么意思?
- 6. SIGCLD和SIGCHLD信号有什么区别?
- 7. 语句中的问号和冒号是什么意思?这是什么意思?
- 8. 符号“#!”是什么意思?在Python中的意思是?
- 9. 什么是“:*”(冒号星号)在Ruby中是什么意思?
- 10. [allowDefinition]错误信息是什么意思?
- 11. SIGCHLD信号处理
- 12. Linux中的符号^ \意思是什么
- 13. “逗号吧”是什么意思?
- 14. 代字号是什么意思?
- 15. TSQL中的“#”符号是什么意思?
- 16. “Decimal?”中的问号是什么?意思?
- 17. 符号T(n)是什么意思?
- 18. JavaScript中的$符号是什么意思?
- 19. makefile符号$ @和$ <是什么意思?
- 20. 闭包的括号是什么意思?
- 21. 这个代字号是什么意思?
- 22. 符号是什么!{JSON.stringify(t(“some.thing”))};意思?
- 23. 这个MSVC符号是什么意思?
- 24. 两个逗号是什么意思?
- 25. PowerShell中的&符号是什么意思?
- 26. 输出符号是什么意思?
- 27. 带#号的手段是什么意思?
- 28. R 2个逗号是什么意思?
- 29. URL中的冒号是什么意思?
- 30. 号码1e5是什么意思?
你应该始终* *阅读与儿童状况'尤其是waitpid'当你安装了'SIGCHLD'处理器(或没有它)。阅读[signal(7)](http://man7.org/linux/man-pages/man7/signal.7.html),[signal(2)](http://man7.org/linux/man- pages/man2/signal.2.html),[sigaction(2)](http://man7.org/linux/man-pages/man2/sigaction.2.html)。 –
waitpid返回-1与errno = ECHILD。所以孩子的状态是无效的,只有一些垃圾。 – kapilddit