72810


Linux上のterminalで `nohup` を付けて処理を動かしているのですが、処理が間違っていたことに気づきました。  
nohup処理を止めたいのですが、どのようにすれば良いでしょうか？  
なお他にも動いているnohup処理はあり、そちらは止めたくありません。

(1) 実行した処理  
`nohup python3 -u my_script1.py > output1.txt`  
`nohup python3 -u my_script2.py > output2.txt`  
`nohup python3 -u my_script3.py > output3.txt`  
実行後、それぞれを実行したterminalを閉じてしまった。

(2) 行いたいこと  
`python3 -u my_script1.py > output1.txt` のみを停止したい

(3) 試した内容  
①新たなterminalを立ち上げて`jobs`を実行したが、何も出力されなかった。  
`$ jobs # 実行した処理`  
`$ # 出力された結果`

以前ネット上で方法を見つけて試した記憶があるのですが、現時点で再度検索しても見つけられませんでした。日本語に自動翻訳したようなサイトは見つかりましたが、日本語が曖昧だったので不安のため、こちらで質問させて頂きます。

よろしくお願いいたします。


CC BY-SA 4.0
2020-12-22T01:24:31.387
72807
2021-02-08T15:13:38.307
2021-02-08T15:13:38.307
30785
30785
question
linux
nohup 付きで実行した処理を強制終了したい


「他にも動いているnohup処理」と「止めたいnohup処理」の違いを調べて、止めたい処理を特定する必要があります。  
他にもあると思いますが、以下のような違いが分かれば止めたい処理を特定することができると思います。

  * 起動コマンド、引数
  * 起動時刻
  * 実行時のディレクトリ
  * 実行ユーザ
  * 実行したターミナル(まだ閉じていなければ)

* * *

起動パラメータが違う場合は

[code]

    ps -efl
    
[/code]

を実行し、起動パラメータで止めたいプロセスのPIDを調べます。  
子プロセスが生成されている場合に備え、調べたPIDで子プロセスのPIDも調べます。

[code]

    ps -efl | grep プロセスID
    
[/code]

後はkillコマンドに止めたいプロセスのPIDを指定してプロセスを終了します。


CC BY-SA 4.0
2020-12-22T01:41:06.457
72809
2020-12-22T02:25:47.560
2020-12-22T02:25:47.560
35558
35558
72807
answer


恐らくバックグラウンド実行をしていると思われるので、`jobs` と `fg` を使って止める方法が考えられます。

  * `jobs` コマンドでバックグラウンド実行しているジョブを確認します。  
表示された結果のうち、先頭の `[1]`, `[2]` が「ジョブ番号」になります。

[code]     $ jobs

    [1]-  実行中               nohup sleep 120 &
    [2]+  実行中               nohup sleep 240 &
    
[/code]

  * 止めたいジョブを確認したら `fg` コマンドでフォアグランド実行に戻します。
[code]     $ fg 2

    nohup sleep 240
    
[/code]

  * `Ctrl` \+ `C` で中断してください。

* * *

**追記を受けて別解:**

  * `ps` コマンドでプロセスの一覧が表示されるので、実行したコマンドを頼りに `grep` で絞り込み、プロセスIDを確認します。
[code]     $ ps -ef | grep sleep

    
    質問の例なら...
    $ ps -ef | grep my_script
      or
    $ ps -ef | grep python3
    
[/code]

  * 表示された結果のうち、左から二列目がプロセスIDになります。
[code]     UID        PID  PPID  C STIME TTY          TIME CMD

    cubick    2598 28397  0 11:06 pts/0    00:00:00 sleep 120
    cubick    2603 28397  0 11:06 pts/0    00:00:00 sleep 240 
    
[/code]

  * 止めたいプロセスIDを確認したら、`kill` コマンドで強制終了します。
[code]     $ kill -9 2603

    
[/code]


CC BY-SA 4.0
2020-12-22T01:44:04.143
72810
2020-12-22T02:10:49.547
2020-12-22T02:10:49.547
3060
3060
72807
answer