アドバイスが必要です:
私のLinuxまたはSolarisで実行されている最後のscan_sys.shプロセスが何であるかをどうやって確認できますか?
私の目標は、最新のscan_sys.shを除くすべてのscan_sys.shプロセスを終了することです(最後の/usr/scan_sys.shスクリプトが実行されます)。
ps -ef | grep scan_sys.sh
。
root 367 1 0 Nov 08 ? 0:21 /usr/scan_sys.sh
root 27517 27515 0 17:27:18 ? 0:01 /usr/scan_sys.sh
root 18939 367 0 Nov 15 ? 0:00 /usr/scan_sys.sh
root 18940 18939 0 Nov 15 ? 0:01 /usr/scan_sys.sh
root 27515 367 0 17:27:18 ? 0:00 /usr/scan_sys.sh
答え1
ps
オプションを使用して、-o
プロセスpid、開始時間、およびコマンド名を表示するために表示するフィールドを選択し、オプションで今興味のあるプロセスを選択し(-C
)、開始時間でソートし、最後のプロセスを除くすべてを終了します。
コマンドラインオプションは地獄で悪名高いので、ps
実装を理解するにはマニュアルページを確認する必要があります。私にとっては、Linuxでは次のような操作が動作します(適切なPIDのリスト)。
ps -C scan_sys.sh -o pid --sort start | sed '$d'
$
単一引用符で insed
スクリプト (少なくとも in ) を引用する必要があります。bash
それ以外の場合は環境変数に展開されますd
。たとえば、xargsまたはコマンド置換(``
または$()
in bash
)を介してPIDを送信して終了できます。