pgrep의 -f 옵션에 대해 설명해주세요

pgrep의 -f 옵션에 대해 설명해주세요

그 남자는 pgrep옵션에 대해 다음과 같이 말했습니다 -f.

   -f     The  pattern  is normally only matched against the process name.
              When -f is set, the full command line is used.

전체 명령줄을 사용한다는 것은 무엇을 의미합니까?

답변1

즉, Without는 명령 이름에서 제공된 정규식 -f만 검색하는 반면, 정규식을 사용하면 해당 인수에서 검색합니다(여기서 첫 번째 인수( )는 반드시 명령 이름과 동일할 필요는 없음).pgrep-fargv[0]

$ sleep 2000 &
[1] 15768
$ pgrep 2000
$ pgrep -f 2000
15768

's를 사용할 때와 다른 명령 이름이 나타나는 경우 argv[0](Linux에서):/proc/$pid/statzshARGV0

$ ARGV0=foo sleep 2000 &
[2] 15881
$ ps -fp $!
UID        PID  PPID  C STIME TTY          TIME CMD
chazelas 15881 13126  0 19:55 pts/1    00:00:00 foo 2000
$ ps -o comm= $!
sleep
$ awk '{print $2}' /proc/$!/stat
(sleep)
$ pgrep foo
$ pgrep sleep
15881
$ pgrep -f sleep
$ pgrep -f foo
15881

Unix와 Linux의 프로세스 이름에 대해 많은 잠재적인 혼란이 있습니다. 프로세스에는 프로세스 이름으로 선언할 수 있는 3가지 속성이 있습니다.

  • 프로세스가 실행한 마지막 execve(2) 시스템 호출에 전달된 실행 파일의 기본 이름입니다. Linux에서는 ps에서 보고되거나 발견된 대로 프로세스 이름을 초기화하는 데 사용됩니다 /proc/$pid/stat. 하지만 Linux에서는 prctl(PR_SET_NAME...).
  • 프로세스에서 현재 실행 중인 실행 파일에 대한 모든 경로 mmap, 바람직하게는 호출 시 경로입니다(예를 들어 스크립트의 경우 shebang 줄에 제공된 경로입니다). Linux에서는 readlink또는 를 사용하여 얻을 수 있습니다 /proc/$pid/exe. 즉, 다른 것을 호출하지 않고는 변경할 수 없습니다. execve(이론적으로는 호출하지 않고 메모리에 새 실행 파일을 로드하고 해당 코드를 실행할 수 있지만 execve예를 들어 몇 가지 시도를 참조하세요.사용자 토지 집행).
  • 첫 번째 매개변수는 execve 시스템 호출과 함께 전달됩니다. 관례적으로 이 매개변수는 응용 프로그램에 이름을 알려주어 그에 따라 작동하는 방법을 알도록 하기 위한 것이므로 일반적으로 프로세스 이름이 의미하는 것입니다. Linux에서는 에서 찾을 수 있지만 /proc/$pid/cmdline프로세스가 가리키는 메모리를 수정하여 이를 변경할 수도 있습니다 argv[0].

또한 다양한 Unices 간에는 많은 차이점이 있다는 점에 유의해야 합니다.

답변2

그렇게 하면 ps -f관련 명령 및 프로세스 정보를 포함하여 프로세스에 대한 자세한 내용이 표시됩니다. 또는 를 사용하면 pgrep -f표시된 정보 대신 검색어와 일치하는 추가 정보를 검색합니다.psps -e

관련 정보