叉中的信号行为是什么。 所有的信号都应该在fork中继承如果不是那么哪一个,为什么?叉中的信号
Q
叉中的信号
4
A
回答
13
至少在Linux下,信号处理程序本身是继承的,但不是挂起的信号。
引述了Linux fork(2)
man page:
叉()创建一个子进程从父进程只有在其PID和PPID不同,在资源利用率设置为0文件锁定的事实并且待处理的信号不被继承。
这很有意义,因为信号属于(父母)过程。新创建的进程(大部分)是当前进程的副本,因此可以保留信号处理程序。
虽然没有直接的关系,在exec()
型呼叫往往遵循fork()
将销毁所有的信号处理程序,因为一个全新的可执行文件被加载到进程(目前覆盖服务信号的功能)。
0
但要确保您的代码在所有平台上的可移植性和一致性,最好检查可能影响程序执行的信号行为。尽管Linux保证如此,但实现可以自由选择他们想要的方式执行。 sigaction可以派上用场。
0
我将与paxdiablo答案一样,尽管信号处理程序被复制,但挂起信号被重新初始化。 这里是从do_fork中的内核源代码中剪切出来的,它实际上代表进程分叉。
/*do_fork(...)*/
spin_lock_init(&p->alloc_lock);
init_sigpending(&p->pending);// reinitializing the pending signals
相关问题
- 1. 信号+叉在linux
- 2. C - 多信号叉与信号量
- 3. 如何使用信号叉?
- 4. PHP分叉和多个子信号
- 5. 使用叉子和杀死信号
- 6. 主信号中的多个信号,信号到文本
- 7. 发送信号到一个分叉的过程,调用exec()
- 8. 等待使用信号量时的分叉过程
- 9. 脉冲和电平信号的时钟域交叉
- 10. 带信号和叉的产品消费者
- 11. Django中的信号
- 12. Linux中的信号
- 13. 信号中的OpenMP
- 14. 信号PyQt4中
- 15. 为什么我的信号量在分叉进程中允许乱序事件?
- 16. 安全交叉线程信号/插槽C++
- 17. C,如何在分叉进程上使用POSIX信号量?
- 18. 手术系统,叉,共享内存和信号灯
- 19. TERM信号分叉进程不起作用
- 20. Perl转发信号SIGINT分叉子进程
- 21. 当使用信号捕捉叉时,程序变得无限
- 22. C - 读者/作者(并发):分叉和信号量输出
- 23. 从MATLAB中的信号中提取脑电信号
- 24. 信号与信号2
- 25. C中设置的信号量的最大信号量数
- 26. qcustomplot中的信号来自Arduino的信号
- 27. 变量,“ - ”(减号信号)中的Bash
- 28. NSOperationQueues中的信号量
- 29. 在mainwindow.close()中的信号
- 30. UNIX中的信号处理
虽然'exec()'类型的调用不会重置任何设置为'SIG_IGN'的东西。至少在Linux上,这些设置会逐渐向下排列。这可能会导致一些讨厌的东西:将'SIGCHLD'设置为'SIG_IGN',然后产生一个shell :-) 我看到你也回答了* [这里](http://stackoverflow.com/questions/32708086/忽略信号在父母进程),所以不要介意;-) – Steven 2017-02-06 12:49:32