sudo pgrep -f는 모든 문자열과 일치하고 증가된 pid를 반환합니다.

sudo pgrep -f는 모든 문자열과 일치하고 증가된 pid를 반환합니다.

관련 문제를 디버깅하는 동안 pgrep이 다음과 같이 임의적인 것처럼 보이는 명령줄 모드에 대해 PID를 반환하는 것을 발견했습니다.

$ sudo pgrep -f "asdf"
13017

$ sudo pgrep -f ";lkj"
13023

$ sudo pgrep -f "qwer"
13035

$ sudo pgrep -f "poiu"
13046

$ sudo pgrep -f "blahblahblah"
14038

$ sudo pgrep -f "$(pwgen 16 1)"
14219

sudo가 없는 동일한 명령은 예상대로 아무것도 반환하지 않습니다.

$ pgrep -f blahblahblah

명령이 무엇인지 확인하기 위해 PID를 ps로 파이핑하려고 시도했지만 작동하지 않았습니다.

$ sudo pgrep -f blahblahblah | xargs ps -f -p
UID        PID  PPID  C STIME TTY          TIME CMD

프로세스가 너무 빨리 종료된 것 같습니다. 그런 다음 ps와 grep을 사용해 보았으나 작동하지 않았습니다(즉, 결과 없음).

$ sudo ps -e -f | grep [a]sdf

$ sudo ps -e -o command | grep asdf
grep asdf

또한 명령을 충분히 빠르게 다시 실행하면 PID가 꾸준히 상승하는 것으로 나타났습니다.

$ for i in $(seq 1 10); do sudo pgrep -f $(pwgen 4 1); done
14072
14075
14078
14081
14084
14087
14090
14093
14096
14099

$ for i in $(seq 1 10); do sudo pgrep -f blahblahblah; done
13071
13073
13075
13077
13079
13081
13083
13085
13087
13089

온전한지 확인하기 위해 find 및 grep을 사용하여 proc 디렉토리 검색을 시도했습니다.

$ sudo find /proc/ -regex '/proc/[0-9]+/cmdline' -exec grep adsfasdf {} \;
Binary file /proc/14113/cmdline matches
Binary file /proc/14114/cmdline matches

$ sudo find /proc/ -regex '/proc/[0-9]+/cmdline' -exec grep adsfasdf {} \;
Binary file /proc/14735/cmdline matches
Binary file /proc/14736/cmdline matches

PID가 다시 상승하는 것 같고 cmdline이 모든 문자열과 일치합니다.

CentOS 6.7 및 Ubuntu 12.04에서 시도했지만 동일한 결과를 얻었습니다. Mac에서 유사한 실험을 시도했을 때 테스트 결과는 음성으로 나타났습니다. 신비한 과정은 없었습니다.

여기서 무슨 일이 일어나고 있는 걸까요?

답변1

즉 , PID는 sudo실행 중인 명령 sudo의 상위 프로세스 PID 입니다 . 전체 명령줄을 검색하면 문자열(패턴)도 원시 부분 이므로 프로세스 가 출력에 나타 납니다. 명령의.pgrepsudo-fsudosudo

-land -a(지원하는 경우 )를 사용하면 pgrep더 나은 아이디어를 얻을 수 있습니다 .

시험:

% sudo pgrep -af "asdf"
4560 sudo pgrep -af asdf

% sudo pgrep -lf "asdf"
4562 sudo

% pgrep -af "asdf" 
%

답변2

sudo"-f"로 검색하는 문자열이 pssudo의 전체 목록 에도 있기 때문에 명령을 찾고 있습니다 .

기본적으로 달릴 때는 sudo pgrep -f xyz달립니다.

PID1 sudo pgrep -f xyz
PID2 pgrep -f xyz

pgrep 명령은 둘 다 찾아 자신을 무시하고 PID1을 일치하는 것으로 보고합니다.

sudo실행될 때마다 새로운 명령이 나오므로 PID는 자연스럽게 증가하게 됩니다 !

관련 정보