Process-Management
查找產生程序的文件路徑
我正在使用 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
並通過 do 產生了一個程序./file_name.cmd
。該過程使用path/to/interpreter
.我想知道這個文件在哪個目錄。我唯一知道我可以嘗試的是
cd / find -iname file_name.cmd
但這需要時間,並且可能會找到重複項。有沒有更好更直接的方法?
給定一個程序 id
<pid>
,然後/proc/<pid>/cwd
是該程序工作目錄的符號連結。也就是說,如果我python ./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
看起來我們正在執行一些完全無害的東西。