web-dev-qa-db-ja.com

バックグラウンドプロセスを終了する方法

リモートマシンで&を使用してバックグラウンドでwgetを開始しました。突然ダウンロードが停止します。プロセスを終了して、コマンドを再実行したい。どうすれば終了できますか?

シェルウィンドウを閉じていません。しかし、あなたが知っているように、それは使用を止めません Ctrl+C そして Ctrl+Z

213

これに対処するには多くの方法があります。

方法#1-ps

psコマンドを使用してこのプロセスのプロセスIDを検索し、PIDを使用してプロセスを強制終了できます。

$ ps -eaf | grep [w]get 
saml      1713  1709  0 Dec10 pts/0    00:00:00 wget ...

$ kill 1713

方法#2-pgrep

pgrepを使用してプロセスIDを見つけることもできます。

$ pgrep wget
1234

$ kill 1234

方法#3-pkill

実行した唯一のwgetであると確信している場合は、pkillコマンドを使用して、ジョブを名前で強制終了できます。

$ pkill wget

方法#4-ジョブ

現在バックグラウンドになっているジョブを実行した場所から同じシェルにいる場合。 jobsコマンドを使用して、まだ実行されているかどうかを確認し、ジョブ番号で強制終了することもできます。

私の偽の仕事、sleep

$ sleep 100 &
[1] 4542

ジョブ番号を見つけます。 注: 4542はプロセスIDです。

$ jobs
[1]+  Running                 sleep 100 &

$ kill %1
[1]+  Terminated              sleep 100

方法#5-fg

fgコマンドを使用して、バックグラウンドジョブをフォアグラウンドに戻すことができます。

偽の仕事、sleep

$ sleep 100 &
[1] 4650

ジョブの番号を取得します。

$ jobs
[1]+  Running                 sleep 100 &

ジョブ#1をフォアグラウンドに戻してから、 Ctrl+C

$ fg 1
sleep 100
^C
$
274
slm

Bashでは、fgを使用してジョブをフォアグラウンドにしてから、 Ctrl+C

または、jobsを使用してプロセスをバックグラウンドでリストしてから、

kill %1

(1がjobsで置き換えられた番号で)

77
Zelda

同様に、kill $!を使用して、最後にバックグラウンドで実行されたジョブを強制終了できます。

14
tek0078

編集:フォアグラウンドに入ると、次のことができます 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.
6
swisscheese

正しい方法は、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
4
tmac

ここに表示されないものの1つは、特にコマンドをテストするときに非常に役立つことがわかったものですが、pidofです。 pidof [command]を使用して、現在実行中のプロセスのプロセスIDを見つけることができます。必要なコマンドのIDをすばやく見つけることができるため、私はそれが好きです。

Pidを取得したら、プロセスを強制終了できます。現在実行中の場合にのみ、プロセスを強制終了する簡単なスクリプトを作成できます。

4
Try431

一般的な例は、stressツールです。次を実行したとしましょう:

$ stress -c 4 -m 4 

ターミナルウィンドウを閉じました。プロセスは、バックグラウンドからリソースを食べ続けます。

彼女の私がすること:

$ x=`pgrep stress` ; Sudo kill -9 $x 

pgrepは、対象プロセスのPIDをリストし、それを変数xに格納してから、kill -9がそれを終了させるために使用します。

1
Saptarshi Ghosh

最も簡単な方法は、-9killコマンドのフラグ

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>
0
handba

bashで最後に停止したプロセス(Ctrl-Z)では、次の方法で強制終了します。

kill %%
kill -9 %%

または選択したい場合は、以下を使用します。

jobs

次に:

kill %N

お気に入り kill %2

0