프로세스가 이미 실행 중인지 확인하는 방법


32

이미 실행중인 특정 프로세스를 확인하고 싶습니다.

나는 주심을 이 Q & A를 .

그러나 나는 구체적인 해결책을 얻지 못했습니다. 다음은 내가 시도한 예입니다. abc.sh파일을 만들고이 스크립트를 백그라운드에서 실행합니다 (예 :) sh abc.sh &.

이제이 파일은 백그라운드에서 실행 중이며 ps aux | grep "abc"명령을 실행합니다.

다음은이 명령의 출력입니다.

prakash     3594  0.0  0.0   4388   820 pts/0    S+   16:44   0:00 grep --color=auto abc

그 후 abc.sh실행중인 스크립트를 중지 하고 동일한 명령 ps aux | grep "abc"명령을 실행하십시오.

그러나 나는 다음과 같은 결과를 얻고있다 :

prakash     3594  0.0  0.0   4388   820 pts/0    S+   16:44   0:00 grep --color=auto abc

프로세스가 실행 중인지 확인하는 다른 방법이 있습니까?

답변:


41

모든 프로세스는 ps aux; 달리기, 잠자기, 좀비 또는 정지 여부.

당신이 사용하여 프로세스를 실행하기 때문에, 귀하의 경우, sh abc.sh, sh실행되지 않고 응용 프로그램 (쉘)입니다 abc.sh. 따라서, ps aux과정 포함되지 않습니다 abc.sh때문에있는 grep어떤 결과를 얻을 수없는합니다.

따라서 올바른 방법은 다음과 같습니다.

ps aux | grep sh

이것은 또한 sh출력의 어디에서나 문자열을 가지고 실행중인 다른 프로세스를 반환 할 수 있습니다 ps aux.

의 출력에 as ps aux가 있으면 프로세스가 "실행 중" 입니다. 그것이 아닌 다른 것이라면, 실행중인 프로세스를 확인하기 위해 명령을 실행 한 인스턴스에서 실행되고 있지 않습니다. ps의 man 페이지에서 다른 프로세스 상태를 찾을 수 있습니다.STATR

D    uninterruptible sleep (usually IO)
R    running or runnable (on run queue)
S    interruptible sleep (waiting for an event to complete)
T    stopped, either by a job control signal or because it is being traced
W    paging (not valid since the 2.6.xx kernel)
X    dead (should never be seen)
Z    defunct ("zombie") process, terminated but not reaped by its parent

top프로세스가 실행 중이거나 대기 중인지 여부와 사용중인 CPU 양, RAM을 확인하기 위해 명령을 실행할 수도 있습니다. (이 과정은 다시 프로세스로 나열됩니다 sh).

그러나 프로세스가로 나열되도록 abc.sh하려면 실행중인 스크립트의 첫 번째 행이 다음과 같아야합니다.

#!/bin/sh

셸이 스크립트를 실행하는 데 사용할 응용 프로그램을 알고 (이 경우에는 #!/bin/bashbash로 변경 ) 다음을 사용하여 프로세스에 실행 권한을 제공합니다.

chmod +x /path/to/abc.sh

파일 /path/to/의 위치로 바꾸고 abc.sh다음을 abc.sh사용하여 실행하십시오.

/path/to/abc.sh

파일 /path/to/위치로 다시 바꿉니다 abc.sh.


2
간단한 질문입니다. 합계 무엇 S+수단
프라 카쉬 V Holkar

그러나 ps aux | grep filename명령 출력을 통해 실행중인 프로세스와 실행되지 않는 프로세스의 차이점을 찾을 수 있습니다 .
Avinash Raj

@TechGuru : 프로세스가 포 그라운드에서 잠자고 있음을 의미합니다. 자세한 내용은 ps 매뉴얼 페이지를 참조하십시오.
jobin

@AvinashRaj : 물론 가능합니다.
jobin

오류가 발생합니다 : 오류, 이것은 않습니다 : 마운트 -t proc 디렉토리 proc 디렉토리 / proc 디렉토리
IgorGanapolsky

7

내 문제 grep는 전체 파서라는 것입니다. 귀하의 예에서 "abc"를 검색하고 있지만 "abc"를 찾고있는 인스턴스를 되찾고 grep있습니다. 조금 원형입니다. 당신은 그것을 걸러 낼 수 있지만 나는 그 모든 것을 조금 이상하게 생각합니다.

나는 awk약간의 파나소닉을하기로했다.

ps aux | awk '$12=="abc.sh"'

awk공백을 기준으로 선을 필드로 분할합니다 (기본적으로). $ 11 + 필드는 명령 열이므로 명령이 "sh abc.sh ..."인 경우 $11sh이고 $12됩니다 abc.sh.

Bash &&||연산자 를 사용하여 출력 또는 체인을 제어하려면 조금 더 영리해야합니다. 아무것도 발견 grep되지 않으면 상태 코드 1 (기술적 실패, 트리거 ||)로 awk종료 되지만 항상 코드 0을 종료합니다.

ps aux | awk '$12=="abc.sh" {exit 0} END{exit 1}' && echo running || echo not running

물론 출력을 화면에 쓰는 것에 관심이 있다면 다음과 같이 할 수 있습니다 awk.

ps aux | awk '$12=="abc.sh" {print "running"; exit} END{print "not running"}'

4

프로세스가 백그라운드에서 시작된 경우 (예 :와 같이) 현재 bash 세션을 확인하는 올바른 방법 sh abc.sh &jobs내장 명령 을 사용하는 것 입니다.

예:

$ sh abc.sh &
[1] 6917
$ jobs
[1]+  Running                 sh abc.sh &

이는 sh abc.sh백그라운드에서 시작된 프로세스가 실행 중임을 의미합니다 . 프로세스가 완료되면 다음과 같은 내용이 표시됩니다.

[1]+  Done                    sh abc.sh

백그라운드에서 더 많은 프로세스를 실행중인 경우 다음을 sh abc.sh사용 하여 프로세스 로만 출력을 제한 할 수 있습니다 .

jobs sh

자세한 내용 help jobs은 참조하십시오 .

위의 방법은 현재 bash 세션에서만 작동합니다. 그러나 다른 bash 세션 (예 : 다른 터미널 창 또는 탭 또는 스크립트)에있는 경우 다음을 제외하십시오.

ps aux | grep "[s]h bin/test.sh"

당신은 또한 사용할 수 있습니다 :

pgrep -a sh

그것은 더 단순 해 보입니다. 출력 ( sh abc.sh이 경우)에 입력 한 명령이 표시 되면 프로세스가 여전히 실행 중임을 의미합니다. 그렇지 않으면 프로세스가 완료된 것입니다.


3

스크립트가 현재 실행중인 경우 ps aux명령 으로 표시해야합니다 . 로 표시되지 않으면 ps스크립트 실행이 현재 종료 된 것일 수 있습니다.

의 출력 ps이 스크립트는 현재 실행되지 않음을 의미처럼,

$ ps aux | grep hm.sh
avinash   6386  0.0  0.0  15940   932 pts/16   S+   17:34   0:00 grep --color=auto hm.sh

다음과 같이 표시되면 스크립트가 현재 실행 중임을 의미합니다.

$ ps aux | grep hm.sh
avinash   6454  0.0  0.0  16616  1384 pts/16   S+   17:35   0:00 /bin/bash ./hm.sh
avinash   6535  0.0  0.0  15940   932 pts/27   R+   17:35   0:00 grep --color=auto hm.sh

그것은 모두 스크립트의 내용을 기반으로합니다.

예를 들어 이와 같은 스크립트를 만드는 경우 실행시 HI 메시지가 표시됩니다. 출력을 표시하는 데 몇 초가 걸리며 최종 결과가 생성 된 후 종료됩니다.

#!/bin/bash
echo "HI"

그러나 당신의 스크립트가 이런식이라면

#!/bin/bash
sudo apt-get update

프로세스가 종료 되려면 몇 분이 걸립니다. 그 동안 ps aux | grep filename명령 을 실행 하면 출력에 표시됩니다. 스크립트가 현재 실행 중이기 때문에.


-2
  • 모든 프로세스를 확인하려면 'top'을 사용하십시오.

  • Java가 실행하는 프로세스를 알고 싶다면 ps -ef | grep java

  • 다른 프로세스라면 그냥 사용 ps -ef | grep xyz하거나 간단히/etc/init.d xyz status

  • .sh다음 과 같은 코드를 통해./xyz.sh status


1
-1 이러한 명령은 일부 상황에서 유용하지만 이러한 상황을 모르는 사람에게는 여전히 쓸모가 없습니다. 각각의 경우에 당신은 그것들을 충분히 설명하지 않거나 설명이 잘못되었습니다.
David Foerster

-2

당신은 단순히 과정에 의거 한 후 그 디렉토리로 이동 입력이 있는지 여부를 확인하려면 ll -tr당신이 볼 경우, .csv또는 .work파일의 끝에 등 다음 다른 처리하지에서 의미합니다.


이 대답은 의미가 없습니다. 디렉토리의 내용을 나열해도 프로세스가 실행 중인지 알 수 없습니다. 파일 확장자 .csv는 실행중인 프로세스와 관련이없는 쉼표로 구분 된 파일 용입니다.
user369450
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.