如果在bash中,我在命令行上運行a | b | c | d
,然後按^C,哪個進程得到信號?從鍵盤發送SIGINT到bash中的管道命令
6
A
回答
9
總之,他們都這樣做。
當設置管道時,shell會創建一個process group。 ^C被內核的行規訓解釋爲用戶請求中斷當前在前臺運行的進程組。向進程組發送信號(如SIGINT
)會自動將信號傳遞給組中的所有進程。
2
我喜歡實驗更好:
#!/bin/bash
# FILE /tmp/bla.sh
# trap ctrl-c and call ctrl_c()
trap ctrl_c INT
MY_ID=$1 # Identifier for messages
function ctrl_c() {
echo >&2 "GOODBYE $MY_ID"
exit
}
# This will continue until interrupted, e.g. if the input/output get closed
cat
# If we somehow got to the end
echo >&2 "grace $MY_ID"
鏈接它們,運行,打破他們
[email protected]:~$ /tmp/bla.sh 1 | /tmp/bla.sh 2
^CGOODBYE 2
GOODBYE 1
0
正如你所看到的,處決了中斷信號,這意味着他們都被殺死。此外,它們輸出的次序是隨機的,例如:
[email protected]:~$ /tmp/bla.sh 1 | /tmp/bla.sh 2 | /tmp/bla.sh 3 | /tmp/bla.sh 4
^CGOODBYE 2
GOODBYE 4
GOODBYE 1
GOODBYE 3
相關問題
- 1. bash:將命令從管道中分離
- 2. Bash。從後臺管道命令stdout
- 3. 管道輸出到bash命令
- 4. 從Android應用程序無線發送鍵盤命令到Mac
- 5. 「多個」管道命令中斷的bash
- 6. 發送管道命令與pxssh/pexpect
- 7. 帶管道的Bash fg命令
- 8. Android:發送onClick bash命令到/ dev/null
- 9. 如何在Bash中將鍵盤和命名管道連接到STDIN?
- 10. 從命令行管道將數據饋送到八度圖中
- 11. Bash腳本在發送時凍結SIGINT
- 12. c#發送鍵盤命令到另一個窗口/進程
- 13. Perl,用管道執行bash命令
- 14. bash腳本 - 管道命令呼應
- 15. 紅寶石管道bash命令
- 16. Bash管道命令及其返回
- 17. 如何從bash發送命令到java程序中?
- 18. 從Matlab GUI內發送SIGINT
- 19. 管道命令到Windows上
- 20. bash,發球在命名管道?
- 21. Linux命令 - 管道命令
- 22. 如何使用自動發送鍵盤和鼠標命令從主機到VMware?
- 23. 有條件的命令在bash中的管道命令序列中執行
- 24. 管道到Ash Shell中的命令
- 25. 管道到不同的命令基於退出狀態在bash
- 26. Arduino發送鍵盤的串行命令按向上箭頭
- 27. 發送bash命令到emacs中打開的終端緩衝區
- 28. 如何從腳本向腳本發送信號SIGINT? BASH
- 29. Bash命令發送電子郵件
- 30. 重定向管道命令到一個文件在bash