リモートマシンで&
を使用してバックグラウンドでwgetを開始しました。突然ダウンロードが停止します。プロセスを終了して、コマンドを再実行したい。どうすれば終了できますか?
シェルウィンドウを閉じていません。しかし、あなたが知っているように、それは使用を止めません Ctrl+C そして Ctrl+Z。
これに対処するには多くの方法があります。
ps
コマンドを使用してこのプロセスのプロセスIDを検索し、PIDを使用してプロセスを強制終了できます。
$ ps -eaf | grep [w]get
saml 1713 1709 0 Dec10 pts/0 00:00:00 wget ...
$ kill 1713
pgrep
を使用してプロセスIDを見つけることもできます。
$ pgrep wget
1234
$ kill 1234
実行した唯一のwget
であると確信している場合は、pkill
コマンドを使用して、ジョブを名前で強制終了できます。
$ pkill wget
現在バックグラウンドになっているジョブを実行した場所から同じシェルにいる場合。 jobs
コマンドを使用して、まだ実行されているかどうかを確認し、ジョブ番号で強制終了することもできます。
私の偽の仕事、sleep
。
$ sleep 100 &
[1] 4542
ジョブ番号を見つけます。 注: 4542はプロセスIDです。
$ jobs
[1]+ Running sleep 100 &
$ kill %1
[1]+ Terminated sleep 100
fg
コマンドを使用して、バックグラウンドジョブをフォアグラウンドに戻すことができます。
偽の仕事、sleep
。
$ sleep 100 &
[1] 4650
ジョブの番号を取得します。
$ jobs
[1]+ Running sleep 100 &
ジョブ#1をフォアグラウンドに戻してから、 Ctrl+C。
$ fg 1
sleep 100
^C
$
Bashでは、fg
を使用してジョブをフォアグラウンドにしてから、 Ctrl+C
または、jobs
を使用してプロセスをバックグラウンドでリストしてから、
kill %1
(1がjobs
で置き換えられた番号で)
同様に、kill $!
を使用して、最後にバックグラウンドで実行されたジョブを強制終了できます。
編集:フォアグラウンドに入ると、次のことができます Ctrl+C、または@Zeldaが言及しているように、「%x」で強制終了すると、「x」はジョブ番号で、デフォルトのシグナルが送信されます(Linuxの場合はSIGTERM)。
fg
と入力するだけで、それがバックグラウンドで実行された最後のプロセスである場合( '&'を使用)、それをフォアグラウンドに移動できます。
それが最後のものではなかった場合は、jobs
と入力して、「[]」で表される「ジョブ番号」を見つけます。次に、次のように入力します。
fg 2
..ここで、「2」はジョブ番号です。次に例を示します。
foo@bar:~/junk/books$ jobs
[1]+ Running okular how_to_cook_a_turkey.pdf &
foo@bar:~/junk/books$ fg 1
okular how_to_cook_a_turkey.pdf <- this is now in the foreground.
正しい方法は、jobs
と入力し、ジョブ番号を使用して強制終了することです。 pidを使用してkillするには、最初の回答で述べたように、pidをフォアグラウンドに持ってくる必要があります。
これを試して
~/Desktop$ sleep 1000 &
[1] 7056
~/Desktop$ jobs
[1]+ Running sleep 1000 &
/Desktop$ kill %1 #(%1 is the job number)
殺した直後にジョブを実行すると、これが表示されます
Desktop$ jobs
[1]+ Terminated sleep 1000
ここに表示されないものの1つは、特にコマンドをテストするときに非常に役立つことがわかったものですが、pidof
です。 pidof [command]
を使用して、現在実行中のプロセスのプロセスIDを見つけることができます。必要なコマンドのIDをすばやく見つけることができるため、私はそれが好きです。
Pidを取得したら、プロセスを強制終了できます。現在実行中の場合にのみ、プロセスを強制終了する簡単なスクリプトを作成できます。
一般的な例は、stress
ツールです。次を実行したとしましょう:
$ stress -c 4 -m 4
ターミナルウィンドウを閉じました。プロセスは、バックグラウンドからリソースを食べ続けます。
彼女の私がすること:
$ x=`pgrep stress` ; Sudo kill -9 $x
pgrep
は、対象プロセスのPIDをリストし、それを変数x
に格納してから、kill -9
がそれを終了させるために使用します。
最も簡単な方法は、-9
kill
コマンドのフラグ
user@Host:/path> jobs
[1]+ Running /usr/home/script1.sh $i &
user@Host:/path> fg
/usr/home/script1.sh $i
^C
[1]+ Stopped /usr/home/script1.sh $i
user@Host:/path> kill -9 %1
[1]+ Stopped /usr/home/script1.sh $i
user@Host:/path>
[1]+ Killed /usr/home/script1.sh $i
user@Host:/path>
user@Host:/path> jobs
user@Host:/path>
bashで最後に停止したプロセス(Ctrl-Z)では、次の方法で強制終了します。
kill %%
kill -9 %%
または選択したい場合は、以下を使用します。
jobs
次に:
kill %N
お気に入り kill %2