web-dev-qa-db-ja.com

Linux:否認されたプロセスを表示して強制終了する

Linuxで&およびdisownを使用してプログラムを開始しました。
それがまだ実行されているかどうかを確認し、おそらくそれを強制終了します。

私は次のようなコマンドでプロセスを開始しました:

(env)bash-4.2$ python manage.py update_rollups &

[1] 29144

(env)bash-4.2$ disown

ps auxでそれを見つけることも、pid 29144に基づいて殺すこともできなくなりました。
プロセスがまだ実行中かどうかを知りたい(init?の下)。

お役に立てれば幸いです。

5
user715198

簡単に

&およびdisownでは、PIDを変更しません [ 1 ] プロセスの。
ps -p <YOURPID>出力に表示されない場合は、実行されていません。
追加のecho $?オーバーチェックできます [ 2 ]ps(またはkill)コマンドの後に、プログラムが0(通常1)とは異なる終了コードで終了するかどうかを確認します。

コマンドを理解する。

  • Background:最後の&でコマンドを起動すると、バックグラウンドで送信されます。
    この意味は:

    • シェルのジョブリストに存在します(例では[1]であり、%1;として参照できます(コマンドjobsを試してください)。
    • fgbgを使用して、フォアグラウンドとバックグラウンドに配置できます。
    • それは(まだ)「(親にリンクされた)シェルによって所有されています」:シェルがSIGHUP信号を受信すると、SIGHUPシグナルもプロセスに送信します。

      $ sleep 1h &
      [1] 10795
      $ jobs
      [1]+  running           sleep 1h & 
      $ ps -l -p 10795       
      F S   UID   PID  PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
      0 S  1000 10795  8380  0  80   0 -  3107 hrtime pts/57   00:00:00 sleep
      
  • Disown:コマンドdisownを使用して、シェルのジョブリストからジョブを削除しますが、PIDは変更しません。

    $ disown
    $ jobs
          # <---- No jobs
    $ ps -l -p 10795
    F S   UID   PID  PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
    0 S  1000 10795  8380  0  80   0 -  3107 hrtime pts/57   00:00:00 
    

    同じPPIDに注意してください(シェルはまだ存在しています)。
    今、私たちはシェルを殺します。

    $ kill 8380   # Here we kill the Shell 
    $ ps -l -p 10795
    F S   UID   PID  PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
    0 S  1000 10795  5339  0  80   0 -  3107 hrtime pts/57   00:00:00 sleep
    

    別のPPID5339があり、psps -p 5339をもう一度呼び出すと、initインスタンスであることがわかります。

    $ ps -p 5339
    PID TTY          TIME CMD
    5339 ?        00:02:20 init
    

pstree:より速い方法。

pstreeを使用すると、よりすばやく表示できます。

disownおよびkillの前にbashコマンド:

$ pstree -s -p 10795 
init(1)───lightdm(1199)───lightdm(5259)───bash(8380)───sleep(10795)

disownkill the bashの後:

$ pstree -s -p 10795 
init(1)───lightdm(1199)───lightdm(5259)───init(5339)───sleep(10795)

注:もちろん、ケース内のすべてのPIDは異なります...

5
Hastur

ps auxfにない場合は、実行されていません。 kill 29144を実行して「そのようなプロセスはありません」と表示された場合は、プロセスが実行されていないことも意味します。

3
user1686

各プロセスには、/procファイルシステムはpidです。フォルダーが存在しない場合、プロセスは実行されていません。

例えば

/proc/29144/

プロセスを表示できますcommandline

cat /proc/29144/cmdline

出力例:

/usr/sbin/smbd

またはプロセスファイルのステータスを確認してください

stat /proc/29144/exe

出力例:

File: /proc/29144/exe -> /usr/sbin/smbd
  Size: 0               Blocks: 0          IO Block: 1024   symbolic link
Device: 3h/3d   Inode: 78497       Links: 1
Access: (0777/lrwxrwxrwx)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2017-04-07 12:18:01.719011505 +0200
Modify: 2017-04-07 12:18:01.369010535 +0200
Change: 2017-04-07 12:18:01.369010535 +0200
 Birth: -
2
Michael D.