私はサーバー上でNohupプロセスを実行しています。私がそれを殺そうとすると、私のPuTTYコンソールは代わりに閉じる。
これは私がプロセスIDを見つけることを試みる方法です:
ps -ef |grep Nohup
これは殺すためのコマンドです
kill -9 1787 787
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
私はVPSサーバー上で(そしてSSH経由で - PuTTYで)Red Hat Linuxを使用しています。
まず、実行中のプロセスをすべてリストします。
ps -ef
それから最初の列にあなたのユーザー名があります。私はそれを次の3回見つけました:
それから2列目には、NohupプロセスのPIDがあります。
kill PID
(もちろんPIDをNohupプロセスのPIDに置き換えます)
そしてそれはそれです!
この答えが私がbashやSSHにとても不慣れな人のためにもなることを願っていますが、私が必要としている知識の95%をここで見つけました:)
以下のコマンドで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
jobs -lは、Nohupプロセスのリストのpidを提供します。それらをやさしく殺しなさい(-9)。 ;)
あなたが試すことができます
kill -9 `pgrep [command name]`
これは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
ゾンビプロセスはついに停止しました。
次のコマンドでDjangoサーバーを起動しました。
Nohup manage.py runserver <localhost:port>
これはCentOS上で動作します。
:~ ns$netstat -ntlp
:~ ns$kill -9 PID
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}
nohupでジョブを作成すると、プロセスIDがわかります。
Nohup sh test.sh &
出力には以下のようなプロセスIDが表示されます。
25013
あなたはそれを殺すことができます:
kill 25013
今日も私は同じ問題に出会った。そして昔から、どのコマンドをいつ使用したかを完全に忘れていました。私は3つの方法を試しました:
ps -ef
コマンドに示されているSTIMEを使用する。これはあなたがあなたのプロセスを開始する時間を示しています、そしてそれはあなたがあなたがsshを閉じる直前にあなたが命令したNohupである可能性が非常に高いです(あなた次第です)。残念ながら、私は最新のコマンドが私がNohupを使って実行しているコマンドだとは思わないので、これは私にはうまくいきません。ps -ef
コマンドに示されています。これは、親プロセスID、プロセスを作成したプロセスのIDを意味します。 Nopidを使用して実行するプロセスのppidは、ubuntuの1です。その後、ps --ppid "1"
を使用してリストを取得し、TIME(プロセスが使用した合計CPU時間)またはCMDをチェックしてプロセスのPIDを見つけることができます。lsof -i:port
を使用すると、コマンドが表示されます。それから上記の答えと同じように、ps -ef | grep command
を使うとPIDが得られます。プロセスのPIDを見つけたら、kill pid
を使用してプロセスを終了させることができます。