Cat

薛定諤的貓

  • October 14, 2021

當我將 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只有在程序繼續時才會傳遞,當您將其返回到前台時會發生這種情況。

引用自:https://unix.stackexchange.com/questions/673156