UNIX \ LinuxアプリケーションでのCTRL + Zの影響


85

私は、CTRl + Zの動作が正確に何であるかを知り、混乱しました。

フォアグラウンドで実行中のプロセスがあり、ctrl + zを押すと、バックグラウンドになります。

しかし、正確に何が起こるか。

仕事を続けているのか、それとも中断されて、その時点で停止したのか。

そして、その時点で停止した場合、およびバックグラウンドジョブの意味は何ですか。


7
Ctrl-Zはプロセスをバックグラウンドに送信せず、中断します。
ウーブル

回答:


70

「バックグラウンドジョブ」とは、ユーザーと対話していないもののことです。ttyを制御せず、(通常は静かに)実行するだけです。フォアグラウンドジョブはその逆であり、ユーザーと対話するためのttyの制御を保持します。

Control-Zは、最新のフォアグラウンドプロセス(ttyと対話する最後のプロセス)を一時停止します(シェルが通常行うように、そのプロセスが一時停止を無視するステップを実行しない限り)。これにより、通常はシェルに戻り、そこからコマンドbgを入力して、中断されたプロセスをバックグラウンドに移動する(実行を継続する)かfg、フォアグラウンドに戻すことができます。


1
バックグラウンドプロセスを元に戻し、fg最初にどのジョブを発行するかを特定しjobs 、次にその%1が発行されfb %1 、プロセスが再開されるかどうかを確認し ます
Scott Stensland

fg %1ではないfb %1
ahonnecke

55

Ctrl + Zを押すとTSTP、プロセスにシグナルが送信されます。これにより実行が停止し(カーネルはプロセスにこれ以上CPU時間をスケジュールしません)、プロセスは処理を続行するためにCONTを待機しています。

kill -TSTPand を介してこれをエミュレート/レプリケートできますkill -CONTkill名前にかかわらず、指定されたシグナルをプロセスに送信します!)

シェルにはプロセスを「バックグラウンド」にする機能がありますが、これはシェルとプロセスの関係です。プロセス自体には、実際には「バックグラウンド」または「フォアグラウンド」の概念がありません。

詳細はこちらをご覧ください。


2
^ZSIGTSTP、SIGSTOPない送信
ウィリアムPursell

@WilliamPursell-ああ!注目。変更されました。Thx
ブライアンアグニュー

15

このコマンドを検討してください。私のラップトップで4.5秒:

echo 2^10000000 | bc -lq | wc -c

Ctrl+ を押すZと、計算が中断されます。を使用してフォアグラウンドで計算を再開するfgか、を使用してバックグラウンドで計算を再開するオプションがありますbg。後者は、実行とほぼ同等です:

echo 2^10000000 | bc -lq | wc -c &

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.