저는 데비안 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
즉, , in 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
우리는 전혀 무해한 일을 하고 있는 것 같습니다.