我想寫一個簡單的shell接受命令行輸入並將其作爲後臺任務執行。C編程基本shell
如何讓子進程在完成後向父進程報告,如Bash shell?
[email protected]:~$ sleep 10 &
[1] 3729
[email protected]:~$ sleep 2 &
[2] 3730
[email protected]:~$
[1]- Done sleep 10
[2]+ Done sleep 2
我想寫一個簡單的shell接受命令行輸入並將其作爲後臺任務執行。C編程基本shell
如何讓子進程在完成後向父進程報告,如Bash shell?
[email protected]:~$ sleep 10 &
[1] 3729
[email protected]:~$ sleep 2 &
[2] 3730
[email protected]:~$
[1]- Done sleep 10
[2]+ Done sleep 2
由於這是你的功課,我不會給你完整的答案。
GNU Glibc manual列出了作業控制shell的要求。讓我們看看你能否理解它。
基本上是:
你必須改變控制終端,使工作在後臺運行
你必須處理SIGCHLD
(或wait
)監測工作
讀完之後再詢問一次。
您需要編寫一個處理SIGCHLD(有時稱爲SIGCLD)信號的信號處理程序,該信號在子結束時發送給父進程。
並在信號處理程序中做什麼? – cnicutar
據我所知,我可以實現一個信號處理程序來「偵聽」SIGCHLD,當子進程終止它將發送一個SIGCHLD信號。 但是命令旁邊的[2] +是什麼 [2] +完成sleep 2 – youcanlearnanything
@ liangteh:「完成」消息不是由孩子寫的 - 它是父進程(shell)寫出一個的子進程已經終止。 --- – ktf
嗨,我已閱讀http://www.gnu.org/software/libc/manual/html_node/Launching-Jobs.html#Launching-Jobs。但是我仍然沒有任何想法來實施你提到的控制終端。你能進一步闡述一下嗎? – youcanlearnanything
@ liangtech,點擊「下一步」鏈接。這是27.6.4前臺和後臺中的「tcsetpgrp」 –