私はDebian 9.13を使用しています。これにより、ps -aux | grep NaughtyProcessName
関心のある特定のプロセスに関する情報を次の形式で見つけることができます。
user.name [ID] [CPU USAGE] [%MEM] VSZ RSS TTY STAT START TIME COMMAND
コマンドは次のように表示されます。
path/to/interpreter ./file_name.cmd
file_name.cmd
だから私は、いくつかのユーザーが次のようにしてプロセスを作成し、作成した不思議なディレクトリにいると仮定します./file_name.cmd
。この手順では、にあるインタプリタを使用しますpath/to/interpreter
。
このファイルがどのディレクトリにあるかを知りたいです。私が試すことができる唯一のこと
cd /
find -iname file_name.cmd
ただし、時間がかかり、重複したコンテンツが見つかる可能性があります。より良い、より簡単なものはありますか?
ベストアンサー1
プロセスIDが与えられると、そのプロセスの作業ディレクトリへのシンボリックリンクが提供されます<pid>
。/proc/<pid>/cwd
つまり、 、 inpython ./example.py
で実行すると次が表示されます。~/tmp/python
ps
$ ps -f -p 118054
UID PID PPID C STIME TTY TIME CMD
lars 118054 6793 0 09:16 pts/1 00:00:00 python ./example.py
には/proc/118054/cwd
以下が表示されます。
$ ls -l /proc/118054/cwd
lrwxrwxrwx. 1 lars lars 0 Aug 31 09:16 /proc/118054/cwd -> /home/lars/tmp/python
./example.py
したがって、その情報を使用して言及された内容を推論することができます/home/lars/tmp/python/example.py
。
ただし、の出力に表示される情報は信頼できませんps
。次の簡単なCプログラムを考えてみましょう。
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
int main(int argc, char **argv[]) {
pid_t pid = getpid();
printf("pid %d\n", pid);
memset(argv[0], ' ', strlen(argv[0]));
strcpy(argv[0], "ls");
sleep(600);
return 0;
}
これを実行すると:
$ ./example
pid 119217
それから見てくださいps
。
$ ps -f -p 119217
UID PID PPID C STIME TTY TIME CMD
lars 119217 6793 0 09:25 pts/1 00:00:00 ls
私たちはまったく無害なことをしているようです。