아닌 것만 나열하는 방법프로세스?

아닌 것만 나열하는 방법프로세스?

특정 프로세스 이름이 실제로 실행 중인지 확인하는 명령줄 옵션 ps이나 다른 상대적으로 간단한 방법 의 조합이 있습니까 (일반적인 사용에 사용할 수 있음).pgrep

<defunct>"실행"이란 실행 중인 프로세스 나 기타 실행되지 않는 프로세스(예: 좀비)를 구체적으로 제외하는 것을 의미합니다 .

이 샘플 스크립트는 예제 프로젝트를 보여줍니다 <defunct>.

#!/bin/bash   ubuntu 10.04

  pgrep ^gnuserv$
# 25591
# 25599
# 27330

  ps $(pgrep ^gnuserv$)  # command ammended as per pilcrow's good suggestion
#   PID TTY      STAT   TIME COMMAND
# 25591 ?        Zs     0:00 [gnuserv] <defunct>
# 25599 ?        Zs     0:00 [gnuserv] <defunct>
# 27330 pts/2    S+     0:00 gnuserv

더 출력 할 수도 있지만 sed더 직접적인 방법이 있을 것 같아요/희망합니다...

답변1

귀하의 의견에서 다음을 명확히하십시오.

실제로 "활성" 프로세스만 출력하는 ps 또는 pgrep(또는 이와 유사한)에 대한 단일 단계 옵션을 찾고 있습니다...

현재 ps/pgrep 구현에 실패하신 것 같습니다.

이와 같은 사후 필터링은 초기 출력에 대한 좋은 이해에 의존하는데, 저는 그것을 가지고 있지 않았습니다...

하지만 당신은할 수 있는이러한 이해를 얻고 더 나아가 필요에 따라 출력을 제어할 수 있습니다. 다음과 같이 시도해 보세요.

function pgrep_live {
  pids=$(pgrep "$1");
  [ "$pids" ] || return;
  ps -o s= -o pid= $pids | sed -n 's/^[^ZT][[:space:]]\+//p';
}

그러면 입력 문자열과 일치하는 모든 pgrep 프로세스의 pid가 반환됩니다."정상적으로 사용 가능합니다."즉, 죽은 것 + 수확되지 않은 것 모두 없습니다()도 중지되지 않음(시간).

답변2

다음과 같이 grep의 -v 옵션을 사용하여 정규식을 무효화할 수 있습니다.

for p in $(pgrep ^gnuserv$) ;do ps x |grep "^\s*$p" | grep -v \<defunct\> ;done

답변3

## bash

## function to check if a process is alive and running:

_isRunning() {
    ps -o comm= -C "$1" 2>/dev/null | grep -x "$1" >/dev/null 2>&1
}

## example 1: checking if "gedit" is running

if _isRunning gedit; then
    echo "gedit is running"
else
    echo "gedit is not running"
fi

## example 2: start lxpanel if it is not there

if ! _isRunning lxpanel; then
    lxpanel &
fi

## or

_isRunning lxpanel || (lxpanel &)

노트: 또는 pgrep -x lxpanel죽은 경우에도 pidof lxpanel여전히 실행 중인 것으로 보고됩니다 (좀비). lxpanel따라서 활성화되고 실행 중인 프로세스를 얻으려면 다음을 사용해야 합니다 ps.grep

답변4

명령줄이 문자열과 일치하는 프로세스를 나열합니다.

livepgrep(){ ps o state=,pid=,command=|sed -E -n "/ sed -E -n/d;/^[^ZT] +[0-9]+ .*$@/p"; }
              ^ ^   ^      ^      ^      ^  ^         ^            ^      ^        ^
              | |   |      |      |      |  |         |            |      |        |
processes ----+ |   |      |      |      |  |         |            |      |        |
output format --+   |      |      |      |  |         |            |      |        |
process state ------+      |      |      |  |         |            |      |        |
pid -----------------------+      |      |  |         |            |      |        |
full command line ----------------+      |  |         |            |      |        |
sed as the filter -----------------------+  |         |            |      |        |
use extended regex -------------------------+         |            |      |        |
exclude sed from search results ----------------------+            |      |        |
state != Z (zombie, defunct) != T (stopped) -----------------------+      |        |
pid ----------------------------------------------------------------------+        |
string to search in the command line ----------------------------------------------+

예:

$ livepgrep tint2
S   493 tint2
$ livepgrep python
S   525 /usr/bin/python /bin/udiskie -C -F -s
S   580 python2 /home/xxx/bin/twmcpuram

관련 정보