叉中的信號行爲是什麼。 所有的信號都應該在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