test.sh 작업은 5분마다 실행되도록 예약되어 있고 또 다른 작업 test1.sh는 오후 12시 30분 @12.30에 실행되도록 예약되어 있습니다. 두 작업 모두 실행되어 교착 상태에 빠지게 됩니다. 따라서 내가 사용하고 있는 test.sh 작업이 실행 중인지 확인해야 합니다.
ps -ef | grep test1.sh
그러나 이는 동일한 명령에 대해 한 줄을 생성하므로 항상 올바른 것 같습니다.
# ps -ef | grep test1.sh
team 24896 607 0 11:55 pts/11 00:00:00 test1.sh
team 24925 523 0 11:55 pts/4 00:00:00 grep test1.sh
grep 인쇄를 피하는 방법은 무엇입니까 test1.sh
?
저는 유닉스를 처음 접했습니다.
고마워요, 앤
답변1
ps
출력을 파이핑하는 대신 실행 중인지 확인하려면 를 grep
사용하면 됩니다 pgrep
. 이는 프로세스의 PID만 출력하므로 훨씬 더 효율적입니다. -x
test1.sh와 전체 이름이 일치하도록 플래그를 사용하고 있습니다.
pgrep -x test1.sh
876
명령 이름도 보려면 이 -l
플래그를 사용할 수도 있습니다.
pgrep -xl test1.sh
876 test1.sh
부분 일치를 원할 경우 제거할 수 있습니다.-x
pgrep -l test
876 test1.sh
877 test2.sh
888 test123.sh
8745 test.bin
답변2
하나씩 따라가면 grep을 무시할 수 있습니다.
ps -ef | grep test1.sh | grep -v grep
기타:-
ps -ef | grep "[t]est1.sh"
두 번째는 아래를 내려다보며 많은 시간을 절약해줍니다.
답변3
grep
이는 과 가 ps
병렬로 시작되어 grep
대상 문자열이 test1.sh
인수로 나타나기 때문에 프로세스가 일치하기 때문에 발생합니다 ps
. 이 문제를 해결하는 간단하지만 아마도 최적은 아닌 방법은 다음과 같습니다.
ps -ef | grep "test1.sh" | grep -v "grep"
두 번째 파이프는 첫 번째 파이프의 출력을 가져와 "grep" 문자열과 일치하는 줄을 제외합니다.