以外のものだけをリストする方法プロセス?

以外のものだけをリストする方法プロセス?

特定のプロセス名が実際に実行されているかどうかを確認するコマンドラインオプションまたは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したがって、アクティブで実行中のプロセスを取得するには、以下を使用する必要がありますpsgrep

答え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

関連情報