catコマンドをバックグラウンドプロセスとして実行すると、
$ cat &
それでは殺してみてください。
$ killall -v cat
15番のシグナルで猫を殺したと言いましたが、猫が詰まってしまいました。実行した後でも$ ps
まだ実行中のものが表示されます。電話をしてから初めて$ fg
サービスが終了しました。
C ++で猫をシミュレートするときに入力を待つことに関連しているようです。
string line;
while(getline(cin, line))
cout << line << endl;
同じことが起こりますが、単純なwhile(true);
ループを使用すると、プロセスは正常に終了します。
$ cat
また、他の端末で実行すると$ killall -v cat
正常に動作するため、バックグラウンドプロセスのようです。
ここで何が起こっているのでしょうか?よろしくお願いします。
答え1
走るとき
cat &
次のメッセージが表示されます。
[1]+ Stopped cat
その直後(おそらく別の作業番号で)。これは標準入力から読み取ろうとするため、cat
バックグラウンドで実行中に最終的に停止します。
SIGKILL
停止したプロセスは再開されるまでシグナルを受信しません。 (続き)。これがここで起こるものです。SIGTERM
プロセスが続行されたときにのみデータが渡され、データをフォアグラウンドに戻すとこれが発生します。