익숙하지 않은 프로세스를 확인하고 종료하라는 요청을 받았습니다. 따라서 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만 인쇄한다는 의미입니다.
echo $!
원하는 PID를 얻으려면 after 명령을 사용하는 것 외에도 . 필요한 경우 명령을 사용 하고 싶습니다 pgrep
(또는 종료하려면 pkill).
pgrep, pkill - 이름 및 기타 속성을 기반으로 프로세스를 찾거나 신호를 보냅니다.
pgrep은 단순히 /proc/*/cmdline을 통해 인수를 수집하고 일치하는 PID를 출력합니다. pkill은 kill과 호환되므로 cmdline을 사용하여 모든 루틴을 쉽게 pkill할 수 있습니다.