Linux는 프로세스의 /proc/PID/stat "이름"을 어떻게 결정합니까?

Linux는 프로세스의 /proc/PID/stat "이름"을 어떻게 결정합니까?

현재 내 컴퓨터에는 스크립트를 실행하는 5개의 프로세스가 있지만 pythonLinux에서는 2개의 프로세스만 실행 중이라고 생각합니다.이름 python(/proc/$pid/stat에 따라). 즉 말하자면 pgrep -af python:

1784 /usr/bin/python -Es /usr/sbin/foo
2306 /usr/bin/python /usr/bin/bar
16964 /usr/bin/python /usr/bin/terminator --geometry=1400x1000
24137 python /home/me/bin/baz.py --arg 70000
25760 python2 -m guake.main

대신 다음 pgrep -a python만 표시됩니다.

24137 python /home/me/bin/baz.py --arg 70000
25760 python2 -m guake.main

여기에 있다이름Linux는 다음과 같은 프로세스를 제공합니다.

% for pid in $(pgrep -f python); do cut -d' ' -f2 /proc/$pid/stat; done
(foo)
(bar)
(/usr/bin/termin)
(python)
(python2)

python그렇다면 Linux는 스크립트 이름이 프로세스인지 여부를 어떻게 결정합니까?이름? 그리고 왜 foo그렇게 bar되는지이름프로세스가 언제 terminator전체 경로를 얻습니까?

통화방법이 중요한 것 같아요. 이 세 가지 프로그램이 어떻게 호출되는지는 모르겠지만, 그 기능은 다음과 같습니다.

/usr/sbin/foo: #!/usr/bin/python -Es
/usr/bin/bar: #!/usr/bin/python
/usr/bin/terminator: #!/usr/bin/python

이것은 확실히 shebang을 사용하여 호출됩니다.

/home/me/bin/baz.py: #!/usr/bin/env python

Guake는 다음과 같이 Bash 스크립트에서 시작됩니다.

exec /usr/bin/env python2 -m guake.main "$@" </dev/null >/dev/null 2>&1 &

내 순진한 추측은 이것이 /usr/bin/env그 뒤에 오는 단어를 프로세스로 만들 것이라는 것입니다.이름하지만 아직 할 일이 더 많은 것 같아요. (그래도,어떻게그것을 할당합니까?이름? )

답변1

Linux에 따라 다릅니다.

프로그램이 다른 프로그램을 시작할 때 실행 파일 이름을 명령줄 인수 $0으로 사용해야 하지만 그렇게 하지 않을 수도 있습니다. 이 필드는 Name항상 /proc/PID/status커널에 의해 실행 파일 이름으로 설정됩니다(그러나 15자로 잘립니다).

응용 프로그램 자체에서 이름을 변경할 수 있습니다. 여기에서 더 긴 이름을 얻을 수 있습니다 /proc/PID/cmdline(첫 번째 Null 바이트까지 읽음).

관련 정보