解決策 1:
最も信頼できる方法は、 /proc
を見ることです プロセスのディレクトリ。各プロセスには /proc/<pid>/
があります 次のような情報を保持するディレクトリ:
cwd
現在の作業ディレクトリへのリンクfd
開いているファイル (ファイル記述子) へのリンクを含むディレクトリcmdline
プロセスを開始するために使用されたコマンドラインを確認するために読んでくださいenviron
そのプロセスの環境変数root
プロセスがルート ディレクトリと見なすものへのリンク (chroot されない限り / になります)各プロセス /proc にはさらに優れた情報がありますが、上記のものを使用すると、何が起こっているかを正確に知ることができます。
また、 ps auxf
を使用 誰が何をフォークしたかが表示されるので、誰があなたの perl を呼び出しているかをよりよく知ることができます。
解決策 2:
ほとんどの場合、ps
を実行するだけです ワイド出力を有効にするためのお気に入りのフラグと一緒に、通常は十分です。 ps -feww
に傾いています 、しかし、ここでの他の提案は機能します。プログラムが誰かの $PATH
から開始された場合に注意してください 、完全なパスではなく、実行可能ファイルの名前のみが表示されます。たとえば、これを試してください:
$ lftp &
$ ps -feww | grep ftp
lars 9600 9504 0 11:30 pts/10 00:00:00 lftp
lars 9620 9504 0 11:31 pts/10 00:00:00 grep ftp
ps
に表示される情報に注意することが重要です。 実行中のプログラムによって完全に上書きされる可能性があります。たとえば、このコード:
int main (int argc, char **argv) {
memset(argv[0], ' ', strlen(argv[0]));
strcpy(argv[0], "foobar");
sleep(30);
return(0);
}
これを「myprogram」というファイルにコンパイルして実行すると:
$ gcc -o myprogram myprogram.c
$ ./myprogram &
[1] 10201
そして ps
を実行します 、別のプロセス名が表示されます:
$ ps -f -p 10201
UID PID PPID C STIME TTY TIME CMD
lars 10201 9734 0 11:37 pts/10 00:00:00 foobar
/proc/<pid>/exe
を直接見ることもできます これは、適切な実行可能ファイルへのシンボリック リンクである場合があります。上記の例では、これにより ps
よりもはるかに有用な情報が得られます。 :
$ls -l /proc/9600/exe
lrwxrwxrwx. 1 lars lars 0 Feb 8 11:31 /proc/9600/exe -> /usr/bin/lftp
解決策 3:
私の場合、ちょうど今、pstree
を見つけました ps aux
よりも、プロセスがどのように開始されたかをより明確に示します。
次のようになります:
├─lightdm─┬─Xorg
│ ├─lightdm─┬─init─┬─apache2───2*[apache2───26*[{apache2}]]
│ │ │ ├─at-spi-bus-laun─┬─dbus-daemon
│ │ │ │ └─3*[{at-spi-bus-laun}]
│ │ │ ├─at-spi2-registr───{at-spi2-registr}
│ │ │ ├─dbus-daemon
│ │ │ ├─dropbox───29*[{dropbox} ]
解決策 4:
使用できます:
systemctl status <PID>
またはプロセスの名前:
systemctl status $(pgrep perl)
これにより、プロセスを開始した systemd サービスに関する情報が提供されます。
ここでこのヒントを見つけました
解決策 5:
ps axww | grep perl
を試してください プロセスの完全なコマンド ラインを取得します。 top
のようです 長い行を削除しました。