シュレディンガーの猫

シュレディンガーの猫

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プロセスが続行されたときにのみデータが渡され、データをフォアグラウンドに戻すとこれが発生します。

関連情報