1. ホーム
  2. linux

[解決済み】nohupプロセスをkillするためにプロセスIDを取得する方法?

2022-01-21 13:04:25

質問内容

サーバーでnohupプロセスを実行しています。このプロセスを終了させようとすると、puttyコンソールが終了してしまいます。

このようにプロセスIDを探そうとします。

ps -ef |grep nohup 

これはkillするコマンドです。

 kill -9 1787 787

解決方法は?

を使用する場合 nohup で、タスクをバックグラウンドに置くと、バックグラウンド演算子( & )は、コマンドプロンプトで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

これは、次のように実行されます。 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