![실행중인 프로세스 확인](https://rvso.com/image/23957/%EC%8B%A4%ED%96%89%EC%A4%91%EC%9D%B8%20%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4%20%ED%99%95%EC%9D%B8.png)
익숙하지 않은 프로세스를 확인하고 종료하라는 메시지가 나옵니다. 그래서 ls
bin 폴더 아래에 여러 프로세스가 표시됩니다 .sh
. 하지만 어떤 프로세스가 어떤 Tomcat 프로세스와 연관되어 있는지 알고 싶습니다.
그것을 쉽게 알 수 있는 방법이 있나요?
예 startmyprocess1.sh
, 하지만 그렇게 하면 ps -ef | grep startmyprocess1
실행 중인 프로세스가 반환되지 않습니다.
하지만 실제로 실행 중인 Tomcat 프로세스 이름은 myprocess
이므로 을 수행하면 ps -ef | grep myprocess
실행 중인 프로세스를 볼 수 있습니다. 그걸 알기 위해서는 책임자에게 물어봐야 해요.
그래서 이름이 다릅니다. 그렇다면 그에게 여러 번 물어봐야 해요. 이것을 알아낼 수 있는 더 좋은 방법이 있나요?
답변1
이것을 시도해 보세요..(테스트되지 않음)
ps -aux | grep "yourprocess"
예를 들어,
ps -aux | grep "httpd"
답변2
startmyprocess.sh 내에서 myprocess를 시작하면~ 아니다기본 쉘 스크립트 뒤에 프로세스 이름을 지정하면 ps -ef | grep startmyprocess1
결과가 반환되지 않습니다.
이는 또한 많은 프로세스, 특히 데몬이 해당 프로세스를 쉽게 참조할 수 있도록 해당 PID를 파일에 기록하는 이유이기도 합니다. 이 작업은 다음을 통해 수행할 수 있습니다.
#!/bin/sh
pid=`myprocess`
echo $pid > /tmp/myprocess.pid
또는 $!
마지막 PID가 포함된 쿼리를 수행할 수 있습니다.
#!/bin/sh
myprocess
echo $! > /tmp/myprocess.pid
pid로 프로세스를 쿼리/나열합니다.
ps --pid $PID
답변3
나는 "top"과 같은 소프트웨어가 훌륭한 작업을 수행할 것이라고 생각합니다.
유형:
top
또는
htop
답변4
@invert의 답변은 많은 것을 설명했으며, 쉘 스크립트는 그 안에서 명령을 실행하기만 합니다. 즉, top
또는 의 출력에서 셸 스크립트 이름을 얻지 못하고 htop
셸 스크립트 내 각 루틴의 /proc/$PID/cmdline만 인쇄한다는 의미입니다.
after 명령을 사용하여 echo $!
원하는 PID를 얻으십시오. 필요할 때 명령을 사용하고 싶습니다 pgrep
(또는 종료하고 싶다면 pkill).
pgrep, pkill - 이름 및 기타 속성을 기반으로 프로세스를 조회하거나 신호를 보냅니다.
pgrep은 단순히 /proc/*/cmdline을 통해 인수를 grep하고 일치하는 PID를 출력합니다. pkill은 kill과 호환되므로 cmdline을 사용하여 모든 루틴을 쉽게 pkill할 수 있습니다.