プロセスを中断および再開する方法


143

bashターミナルでは、実行中のプロセスを一時停止するためにControl+ Zを押すことができます。その後fg、プロセスを再開するために入力できます。

PIDしかない場合、プロセスを一時停止することはできますか?もしそうなら、どのコマンドを使用する必要がありますか?

私は次のようなものを探しています:

suspend-process $PID_OF_PROCESS

そして、それを再開するには

resume-process $PID_OF_PROCESS

回答:


172

を使用killしてプロセスを停止できます。

プロセスを「丁寧に」停止するには(通常の使用ではこれをお勧めします)、SIGTSTPを送信します。

kill -TSTP [pid]

「ハード」ストップの場合、SIGSTOPを送信します。

kill -STOP [pid]

PIDで停止しようとしているプロセスがシェルのジョブテーブルにある場合、プロセスがfg再び「d」されるまで、そこに表示されたままで終了する場合があることに注意してください。

プロセスの実行を再開するには、SIGCONTを送信します。

kill -CONT [pid]

25
他の理由がない限り、SIGSTOPを特別に処理するアプリケーションもあるため、SIGSTOPよりもSIGTSTPを好むでしょう。たとえば、scpが進行状況バーを表示している場合、SIGTSTPは中断する前に端末モードをクリーンアップしますが、SIGSTOPを送信した場合、それを行う機会はありません。
一時的な

3
@ephemient SIGTSTPを試してみたところ、端末のクリーンアップについてあなたが言っていることがわかりました。SIGTSTPの説明をありがとう、新しいことを学ぶのに良いアラウィ:)
スティーブバージン

2
また、%シンボルを使用して[pid]値を参照し、次にジョブ番号(を実行すると見つけることができるもの)を参照できることに注意してくださいjobs。だからあなたは行くだろうkill -TSTP %1
-Karoh


43

killそのためにコマンドを使用する必要があります。

ユーザーが指定する必要があります-より冗長であるために右の信号を、すなわち

$ kill -TSTP $PID_OF_PROCESS

プロセスを中断するため

$ kill -CONT $PID_OF_PROCESS

それを再開するため。ここに文書化されています


この答えが投票数を減らしたのは、歴史上のどんな事故につながったのだろうか?答えはほぼ同じであり、これは....最初に来た
ワイルドカード

7
@Wildcard、答えを作成したとき、私は少し急いでいたので、基本的には最初の部分kill -TSTP(つまり、一時停止の方法)までしか含まれていませんでした。半年後、つまり2011年、私は自分の答えを再訪し、その不完全さに気付いた。したがって、私はそれを編集し、kill -CONT部品も追加しました。これは、Steveの回答と比較した投票の違いを説明するはずです。
maxschlepzig
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.