を使用してバックグラウンドでリモートマシンでwgetを開始しました&
。突然ダウンロードが停止します。プロセスを終了してから、コマンドを再実行します。どうすれば終了できますか?
シェルウィンドウを閉じていません。ただし、ご存じのとおり、Ctrl+ CとCtrl+の使用は停止しませんZ。
を使用してバックグラウンドでリモートマシンで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
を使用してプロセスIDを見つけることもできますpgrep
。
$ 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
$
ps
ます。3番目の#は、親のプロセスIDです。
ps -eaef| grep [w]get
。
pgrep
代わりにを使用することもできますpgrep wget
。
ps -eaf | grep [w]get
。オプションはps
manページにあります。man ps
。
編集:フォアグラウンドになったら、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.
ここに表示されていないことの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
てプロセスを終了します。
bashで最後に停止したプロセス(Ctrl-Z)では、次の方法で強制終了します。
kill %%
kill -9 %%
または選択する場合は、次を使用します。
jobs
その後:
kill %N
好む kill %2
jobs
はnooutput
とfg
sais:があり-bash: fg: 1: no such job
ます。しかし、タイピングがfg
うまく機能してもpkill wget
うまく動作します。しかしps -eaf|grep wget
、それからkill <process number>
仕事を止めないでください。ps:3番目の番号をプロセス番号として使用します。