명령줄과 스크립트에서 실행할 때 ps 출력이 다릅니다.

명령줄과 스크립트에서 실행할 때 ps 출력이 다릅니다.

실행 중인 프로세스의 PID 목록을 만들어야 합니다.

이게 스크립트야

ps
echo "fields are "
ps | cut -d' ' -f1

ps전시

  PID TTY          TIME CMD
 2168 pts/4    00:00:00 sh
 2177 pts/4    00:00:00 mailx
 5191 pts/4    00:00:00 sh
 6494 pts/4    00:00:00 sh
 6495 pts/4    00:00:00 ps
12154 pts/4    00:00:00 sh
12172 pts/4    00:00:00 mailx
15618 pts/4    00:00:00 bash

하지만 파이프를 자르는 결과는 단지

12154
12172
15618

답변1

문제는 cut단일 공백 ​​문자를 구분 기호로 사용하는 것이지만 열 이름과 4자리 PID가 오른쪽 정렬되므로 선행 공백이 여러 개 있어 cut빈 줄이 출력됩니다.

awk또 다른 방법은 이러한 입력을 더 잘 처리하는 를 사용하는 것입니다 .

ps | awk '{ print $1 }'

ps특별한 상황에서마인드몽키의 답변더 나은 방법입니다.

답변2

전체 목록:

ps -eo pid

또는 귀하의 프로세스만:

ps -o pid

답변3

세 번째 옵션으로 다음을 사용할 수도 있습니다 grep.

ps | grep -oP '^\s*\d+'

-PPerl 정규식( \s, \d+) 을 활성화 하고 일치하는 줄 중 일치하는 부분만 인쇄되도록 -o합니다 .grep

관련 정보