3

プロセスのPIDを知っていて、ps -Aで検索を実行したい場合、どうすればよいですか?私はこれをやってみました:

echo "Enter PID to search: "
read PID
search=$(ps -A | grep -v PID | awk '{print $1}') 

これにより、PIDの長いリストが返されます。では、出力の個々の値をどのように使用して、次のことを行うことができますか?

if [ "$PID" = "*each_value_in_search_list*" ]; then
........

この場合、ユーザーが入力した内容とコマンドの出力を比較しようとしていますが、どうすればよいですか?そもそも私は正しいやり方をしていますか?または、これを行う他の方法はありますか?

この質問に答えてくれた皆さん、助けてくれてありがとう。(:

4

6 に答える 6

5

grep の -v スイッチは、逆検索を実行します。つまり、必要のないものすべてを取得します。変数を設定したら、$ を前に付けて参照する必要があります。

これを試して

#!/bin/bash

echo "Enter PID to search: "
read PID
search=$(ps --pid $PID -o comm=)

if [ $search ]
    then
        echo "Program: $search"
    else
        echo "No program found with PID: $PID"
fi
于 2009-05-25T03:53:33.573 に答える
3

psリテラル文字列「PID」を含まないすべての行の出力を grep しています。リテラル「PID」の代わりに PID という名前の変数を使用する$PID代わりに使用します。さらに、PID に一致する他のフィールドで誤検知が発生しないようにするため、最初の列だけを一致させます。

search=$(ps -A | grep "^ *$PID\>" | awk '{print $1}')

エスケープ シーケンスは"\>"、単語の末尾にある空の文字列に一致します。

の一部のバージョンでは、特定の PID に関する情報のみを提供psするオプションがサポート-pされているため、grep や awk は必要ありません。

search=$(ps -p $PID)
于 2009-05-25T03:48:35.353 に答える
3

これは、出力から実際の PID の詳細を取得する方法"grep -v PID"ではなく、見出し行を削除するための標準的なトリックです。

そのプロセスの詳細だけが必要な場合は、次を使用してください。

search=$(ps -A | awk -v pid=$PID '$1==pid{print pid}')

これにより、問題の PID が存在する場合は検索が設定され、そうでない場合は空の文字列が設定されます。

PID を盲目的に検索することには問題があります (列 1 を でチェックするのとは対照的にawk)、その PID がコマンド文字列に表示される行をピックアップする可能性があります。

于 2009-05-25T04:05:36.787 に答える
0
<?php
echo shell_exec("ps -Ao cmd,pid|grep -P ' {$pid}$'");
?>
于 2011-04-12T09:39:26.727 に答える