Killallは「プロセスが見つかりません」とマークしていますが、ps

Killallは「プロセスが見つかりません」とマークしていますが、ps

kill誰かが私に違いを説明できますかkillall?なぜkillallどのプログラムも見ることができないのですかps

# ps aux |grep db2
root      1123  0.0  0.8 841300 33956 pts/1    Sl   11:48   0:00 db2wdog                                         
db2inst1  1125  0.0  3.5 2879496 143616 pts/1  Sl   11:48   0:02 db2sysc                                        
root      1126  0.0  0.6 579156 27840 pts/1    S    11:48   0:00 db2ckpwd                                        
root      1127  0.0  0.6 579156 27828 pts/1    S    11:48   0:00 db2ckpwd                                        
root      1128  0.0  0.6 579156 27828 pts/1    S    11:48   0:00 db2ckpwd 

# killall db2ckpwd
db2ckpwd: no process found

# kill -9 1126
# kill -9 1127
# kill -9 1128

システムはSuSe 11.3(64ビット)、PSmisc 22.7のprocpsバージョン3.2.8、GNU coreutils 7.1

ベストアンサー1

これはLinuxにありますか?

ps実際、killall背中で使用されるコマンド名には少し異なるバージョンがいくつかあります。

2つの主な変形は次のとおりです。 1)実行時に取得する長いコマンド名ps u2)フラグなしで実行したときに取得する短いコマンド名ps

最大の違いは、プログラムがシェルスクリプト、またはインタプリタを必要とするプログラム(Python、Javaなど)の場合に発生する可能性があります。

以下は、違いを示す非常に単純なスクリプトです。私はそれをそう呼ぶmycat

#!/bin/sh
cat

実行後は2種類ありますps

まず、以下はありませんu

$ ps -p 5290
  PID TTY      ... CMD
 5290 pts/6    ... mycat

次に、次を使用しますu

$ ps u 5290
USER       PID ... COMMAND
mikel     5290 ... /bin/sh /home/mikel/bin/mycat

2番目のバージョンがどのように始まるか注意してください/bin/sh

今、私が知っている限り、killall実際にはを読み、/proc/<pid>/stat括弧の間の2番目の単語をコマンド名として取得するので、実行時にそれを指定する必要がありますkillall。論理的には、psフラグなしで話すのと同じでなければなりませんuが、確認することをお勧めします。

確認すべき事項:

  1. cat /proc/<pid>/statコマンド名とは何ですか?
  2. ps -e | grep db2コマンド名とは何ですか?
  3. Dops -e | grep db2ps au | grep db2showのコマンド名は同じですか?

ノート

他のpsフラグも使用している場合は、ps -o comm短い名前ビューと長い名前ビューを使用する方がps -o cmd簡単です。

pkillより良いオプションを見つけることもできます。具体pkill -f的には、完全なコマンド名、つまりps uまたはで印刷されたコマンド名を使用して一致させますps -o cmd

おすすめ記事