2013-06-29 58 views
125

私はサーバー上でnohupプロセスを実行しています。私がそれを殺そうとすると、代わりにパテのコンソールが閉じます。プロセスIDを取得してnohupプロセスを強制終了するにはどうすればいいですか?

これは私がプロセスIDを探してみる方法です:

ps -ef |grep nohup 

これはnohupを使用する場合

kill -9 1787 787 
+6

スクリプトまたはコマンドラインでそれを殺すためにしようとしていますか? 'nohup'を実行するときにPIDを保存し、後で' kill'のために使用するか、 'ps -ef'出力でそのコマンド名でプロセスを見つけてそこからPIDを取得する必要があります。 'nohup'ではなく、コマンド名を探す必要があります。 – lurker

+0

@mbratch thxあなたは華麗です! – user2535056

+0

@mbratchあなたはコメントの代わりに答えを出すべきです。 –

答えて

203

を殺すためのコマンドであり、あなたは、バックグラウンドでバックグラウンド作業をタスクを置きます(&)は、コマンドプロンプトでPIDを表示します。プロセスを手動で管理する計画であれば、そのPIDを保存し、必要に応じて後で使用してkill PIDまたはkill -9 PID(強制終了する必要がある場合)を使用してプロセスを終了することができます。あるいは、PIDを後でps -ef | grep "command name"で見つけてそこからPIDを見つけることができます。問題のコマンドの出力では、nohupキーワード/コマンド自体がps出力に表示されないことに注意してください。

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

これは(スクリプトで、$!は、最後に実行されたプロセスのPIDを表します)my.logにすべての出力を保存しmy_commandを実行します:スクリプトを使用した場合

することは、あなたのような何かを行うことができます。 2は標準エラー(stderr)のファイル記述子で、2>&1はシェルに標準エラー出力を標準出力(ファイル記述子1)に送るように指示します。それは&1を必要とするので、シェルはファイルが1の代わりにそのコンテキストのファイル記述子であることを知るようにします。 2>&1は、通常標準エラーに書き込まれたエラーメッセージを、my.logファイル(標準出力からのもの)に取り込むために必要です。シェルによるI/Oリダイレクション処理の詳細については、I/O Redirectionを参照してください。

コマンドが出力を定期的に送信する場合は、出力を時々tail my.logで確認するか、またはそれに従う場合はtail -f my.logを使用できます。あなたがプロセスを殺すために必要がある場合は最後に、あなたは経由でそれを行うことができます。

kill -9 `cat save_pid.txt` 
rm save_pid.txt 
+8

ちょっと明確にすると、それはPIDだけを出力する 'nohup'ではなく、最終的な'& 'です。 'ls&'は 'ls'を実行するためのPIDを表示します – karmakaze

+0

@karmakazeはい、確かに、そのことを明らかにしてくれてありがとう! – lurker

+1

'2>&1'は何をしますか? – Viraj

47

私はVPSサーバー(およびSSH経由 - パテ)上のRed Hat Linuxを使用しています私のために次のように働いた、:

ユーザー名を見つける最初の列に続いて

ps -ef 

;:

まず、あなたはすべての実行中のプロセスをリスト私はそれを見つけ、次の3回:

  • 一つは、第二は、最後の2番目の列に続いてnohupをプロセス

  • FTP接続した
  • SSH接続であったあなたnohupプロセスのPIDを見つけることができ、次のように入力するだけです:

    kill PID 
    

    (PIDをnohup proceもちろんのssのPID)

    それはそれです!

    私はこの答えは私ものbashやSSHに非常に新しいです誰かのために役立つことを願っていますが、私はここに必要な知識の95%を発見した:)

  • +1

    あなたはUIDではなくPIDを意味すると思いますか? – wprins

    +0

    私は@wprinsに同意します。 UIDを殺すことは私にとってはうまくいかなかったが、PIDを殺すことはできなかった。 – Ryan

    4

    あなたは

    kill -9 `pgrep [command name]` 
    
    +0

    非常にいいです!私は 'pkill [コマンド名]'を使いました。最も古いマッチングプロセスを強制終了するために '-o'フラグを使うことができます。代わりに' -n'を使って最新のものを使うことができます。 – zanona

    24

    を試みることができます私は、私は、コマンド名を指定することにより、上記のバックグラウンド・プロセスのPIDを取得することができ、以下のコマンド

    nohup ruby script.rb & 
    

    と、バックグラウンドでRubyスクリプトを実行していたとします。私の場合、コマンドはルビーです。

    ps -ef | grep ruby 
    

    出力

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

    は今、あなたは簡単に

    kill 25938 
    
    +1

    Sanjay、私は何も分からないと確信しています。あなたの答えは何年前に提供された答えと何が違うのですか? 'ps -ef'と' kill'はどちらも上でよくカバーされていたので、新しい部分は何ですか? –

    +2

    ps -efは長いリストの出力を提供し、この長いリストからの検索は難しくなります。だから私はps -ef | grep ruby​​は単にps -efを実行するよりもpidを検索するコマンドです –

    10

    仕事はあなたにはnohupプロセスのリストのためのPIDを与える必要がありを-l killコマンドを使用してプロセスを強制終了することができます。 それらを穏やかに(-9)殺す。 ;)

    +3

    ジョブが現在のシェルで開始された場合のみです。また、通常の信号が動作しないことが分かっていない限り、 'kill -9'を実行しないでください。 – tripleee

    1

    これは、このJavaに係るすべての実行中のプロセスが、私の場合は

    が表示されますPID

    ps aux | grep java 
    

    を見つけるためには

    ある Ubuntu

    タイプで動作します

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

    今すぐkill i t kill -9 3315

    最終的にゾンビプロセスが停止しました。

    1

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

    nohup manage.py runserver <localhost:port> 
    

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

    :~ ns$netstat -ntlp 
    :~ ns$kill -9 PID 
    
    関連する問題