이것은 실제 문제는 아니지만 이상한 문제에 더 가깝습니다. 이것을 실행하면 while true; do ps aux | grep abc; echo done; done
다음과 같은 결과가 나타납니다.
user 29733 0.0 0.0 11748 924 pts/1 R+ 20:25 0:00 grep --color=auto abc
done
user 29735 0.0 0.0 11748 920 pts/1 S+ 20:25 0:00 grep --color=auto abc
done
user 29737 0.0 0.0 11748 924 pts/1 S+ 20:25 0:00 grep --color=auto abc
done
done
done
done
user 29745 0.0 0.0 11748 924 pts/1 R+ 20:25 0:00 grep --color=auto abc
done
user 29747 0.0 0.0 11748 924 pts/1 R+ 20:25 0:00 grep --color=auto abc
done
user 29749 0.0 0.0 11748 924 pts/1 R+ 20:25 0:00 grep --color=auto abc
done
user 29751 0.0 0.0 11748 924 pts/1 R+ 20:25 0:00 grep --color=auto abc
done
user 29753 0.0 0.0 11748 924 pts/1 S+ 20:25 0:00 grep --color=auto abc
done
user 29755 0.0 0.0 11748 924 pts/1 S+ 20:25 0:00 grep --color=auto abc
done
done
user 29759 0.0 0.0 11748 924 pts/1 R+ 20:25 0:00 grep --color=auto abc
done
user 29761 0.0 0.0 11748 920 pts/1 R+ 20:25 0:00 grep --color=auto abc
done
때때로 grep
당신은 실제로 자신을 보지 못합니다 ps aux
. 두 프로세스가 실행되는 것은 시간 문제입니까? 이는 루프가 아닌 개별적으로 명령을 실행할 때도 발생합니다.
이 문제는 내 컴퓨터와 SSH를 통한 다른 컴퓨터 모두에서 발생하지만 (출력이 제공되는) 원격 컴퓨터에서 더 자주 발생합니다.
우분투14.04
답변1
말씀하신 대로 타이밍인 것 같아요. 파이프라인의 명령은 동시에 실행됩니다. 자세한 정보를 확인할 수 있습니다. 파이프라인 명령은 어떤 순서로 실행되나요?. CPU가 많거나 적거나 프로세스가 많거나 적은 경우 컴퓨터에서 이런 일이 더 자주 발생할 수 있습니다.
답변2
이는 시간에 따라 다릅니다. 당신은 거의 항상아니요grep 명령 자체가 출력의 일부가 되기를 바랍니다. 특히 ps를 필터링하고 결과를 종료하려는 경우 ;-)
일반적인 관용어/기술은 다음과 같습니다.
while true; do ps aux | grep [a]bc; echo done; sleep 1; done
즉, grep은 여전히 abc가 포함된 항목을 찾지만 grep 명령 자체는 실제로 "[a]bc"이기 때문에 일치하지 않습니다...
Linux 또는 최신 Unix를 사용하는 경우
watch -n1 'ps aux | grep [a]bc'
while..done 루프보다 약간 짧습니다.
답변3
정말 시간이 다 됐네요.
grep 명령을 보고 싶지 않은 경우 사용 사례에 따라 두 가지 작업을 수행할 수 있습니다.
PID만 확인해야 하는 경우 다음을 수행하세요.
pgrep -l python
자세한 내용이 필요한 경우:
ps aux | grep python | grep -v grep