Cat
薛定諤的貓
當我將 cat 命令作為後台程序執行時,
$ cat &
然後嘗試殺死它,
$ killall -v cat
它說它用信號 15 殺死了貓,但這隻貓只是被停止了。執行後
$ ps
,我看到它仍在執行。直到我打電話$ fg
,它才最終被終止。好像和等待輸入有關,因為在c++中模擬cat的時候,
string line; while(getline(cin, line)) cout << line << endl;
同樣的事情發生了,但是對於一個簡單的
while(true);
循環,該程序被成功殺死。它似乎也是一個後台程序,因為當我
$ cat
在另一個終端執行時$ killall -v cat
它也可以正常工作。這裡發生了什麼?提前致謝。
當你跑
cat &
你應該看到一條消息說
[1]+ Stopped cat
此後不久(可能有不同的工作編號)。這是因為
cat
試圖從它的標準輸入中讀取,所以當它在後台執行時,它最終會被停止。
SIGKILL
停止的程序在恢復(繼續)之前不會收到信號。這就是這裡發生的事情:SIGTERM
只有在程序繼續時才會傳遞,當您將其返回到前台時會發生這種情況。