web-dev-qa-db-ja.com

Nohupプロセスを強制終了するためにプロセスIDを取得する方法

私はサーバー上でNohupプロセスを実行しています。私がそれを殺そうとすると、私のPuTTYコンソールは代わりに閉じる。

これは私がプロセスIDを見つけることを試みる方法です:

ps -ef |grep Nohup 

これは殺すためのコマンドです

 kill -9 1787 787
170
user2535056

Nohupを使用しているときにタスクをバックグラウンドで実行すると、バックグラウンド演算子(&)によってコマンドプロンプトのPIDが表示されます。あなたの計画が手動でプロセスを管理することであるなら、あなたはそのPIDを保存して、もし必要ならばkill PIDまたはkill -9 PIDを通してプロセスを殺すために後で使うことができます。あるいは、ps -ef | grep "command name"で後でPIDを見つけて、そこからPIDを見つけることもできます。問題のコマンドのNohupキーワード/コマンド自体は、psの出力には表示されません。

スクリプトを使用した場合は、次のようにできます。

Nohup my_command > my.log 2>&1 &
echo $! > save_pid.txt

これはmy_commandを実行してすべての出力をmy.logに保存します(スクリプトでは、$!は最後に実行されたプロセスのPIDを表します)。 2は標準エラー(stderr)のファイル記述子で、2>&1はシェルに標準エラー出力を標準出力(ファイル記述子1)に送るように指示します。シェルは、&1という名前のファイルではなく、そのコンテキスト内のファイル記述子であることをシェルが認識できるように1を必要とします。 2>&1は、通常標準エラーに書き込まれるエラーメッセージをmy.logファイル(標準出力から来る)にキャプチャするために必要です。シェルでのI/Oリダイレクト処理の詳細については、 I/Oリダイレクト を参照してください。

コマンドが定期的に出力を送信する場合は、tail my.logを使用して出力をチェックすることができます。あるいは、それを「ライブ」で追跡したい場合は、tail -f my.logを使用できます。最後に、プロセスを強制終了する必要がある場合は、次の方法でそれを実行できます。

kill -9 `cat save_pid.txt`
rm save_pid.txt
292
lurker

私はVPSサーバー上で(そしてSSH経由で - PuTTYで)Red Hat Linuxを使用しています。

まず、実行中のプロセスをすべてリストします。

ps -ef

それから最初の列にあなたのユーザー名があります。私はそれを次の3回見つけました:

  • 一つはSSH接続でした
  • 二つ目はFTP接続でした
  • 最後のものはNohupプロセスでした

それから2列目には、NohupプロセスのPIDがあります。

kill PID 

(もちろんPIDをNohupプロセスのPIDに置き換えます)

そしてそれはそれです!

この答えが私がbashやSSHにとても不慣れな人のためにもなることを願っていますが、私が必要としている知識の95%をここで見つけました:)

75
Phonebox

以下のコマンドでRubyスクリプトをバックグラウンドで実行しているとします。

Nohup Ruby script.rb &

それから私はコマンド名を指定することによって上記のバックグラウンドプロセスのPIDを得ることができます。私の場合、コマンドはRubyです。

ps -ef | grep Ruby

出力

ubuntu   25938 25742  0 05:16 pts/0    00:00:00 Ruby test.rb

これで、killコマンドを使って簡単にプロセスを強制終了できます

kill 25938
36
Sanjay Salunkhe

jobs -lは、Nohupプロセスのリストのpidを提供します。それらをやさしく殺しなさい(-9)。 ;)

14

あなたが試すことができます

kill -9 `pgrep [command name]`
5
Balliver

これはUbuntuで動作します

これを入力してPIDを見つけます

ps aux | grep Java

Javaに関するすべての実行中のプロセスが表示されます

私の場合は

johnjoe      3315  9.1  4.0 1465240 335728 ?      Sl   09:42   3:19 Java -jar batch.jar

今それを殺しますkill -9 3315

ゾンビプロセスはついに停止しました。

3
John Joe

次のコマンドでDjangoサーバーを起動しました。

Nohup manage.py runserver <localhost:port>

これはCentOS上で動作します。

:~ ns$netstat -ntlp
:~ ns$kill -9 PID 
1
Naseer-shaik

Nohupを使ってJavaプログラムを実行しているとします。

`ps aux | grep Java`

出力

xxxxx     9643  0.0  0.0  14232   968 pts/2   

それからあなたは次のように入力してプロセスを終了させることができます。

Sudo kill 9643

または、すべてのJavaプロセスを強制終了してから使用する必要があると言うこともできます。

Sudo killall Java

このコマンドはすべてのJavaプロセッサを強制終了します。あなたはプロセスでこれを使用することができます。単にコマンドの最後にプロセス名を付けてください

Sudo killall {processName}
1
NuOne

nohupでジョブを作成すると、プロセスIDがわかります。

Nohup sh test.sh &

出力には以下のようなプロセスIDが表示されます。

25013

あなたはそれを殺すことができます:

kill 25013
0
broid

今日も私は同じ問題に出会った。そして昔から、どのコマンドをいつ使用したかを完全に忘れていました。私は3つの方法を試しました:

  1. ps -efコマンドに示されているSTIMEを使用する。これはあなたがあなたのプロセスを開始する時間を示しています、そしてそれはあなたがあなたがsshを閉じる直前にあなたが命令したNohupである可能性が非常に高いです(あなた次第です)。残念ながら、私は最新のコマンドが私がNohupを使って実行しているコマンドだとは思わないので、これは私にはうまくいきません。
  2. 2番目はPPIDです。これもps -efコマンドに示されています。これは、親プロセスID、プロセスを作成したプロセスのIDを意味します。 Nopidを使用して実行するプロセスのppidは、ubuntuの1です。その後、ps --ppid "1"を使用してリストを取得し、TIME(プロセスが使用した合計CPU時間)またはCMDをチェックしてプロセスのPIDを見つけることができます。
  3. プロセスがいくつかのポートを占有している場合はlsof -i:portを使用すると、コマンドが表示されます。それから上記の答えと同じように、ps -ef | grep commandを使うとPIDが得られます。

プロセスのPIDを見つけたら、kill pidを使用してプロセスを終了させることができます。

0
Youth Wu