실행중인 프로세스 확인

실행중인 프로세스 확인

익숙하지 않은 프로세스를 확인하고 종료하라는 요청을 받았습니다. 따라서 lsbin 폴더 아래에 있으면 여러 프로세스가 표시됩니다 .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할 수 있습니다.

관련 정보