特定の名前でプロセスを終了し、ルートプロセスを除外する方法

特定の名前でプロセスを終了し、ルートプロセスを除外する方法

しばらく前に我々は発見した。pkillプロセスを完全に整理するために、setuid(root用)スクリプトでこれを使い始めます。これにより、重要でない権限の制限により、一部のクライアントがスクリプトを使用して一般リソースを削除できない愚かなメンテナンス作業が大幅に削減されます。

しかし、少しの努力の後、私たちはちょうど考えましたpkill -v -u root <name>(これまでは単純さを保ち、背中を使って長くて見苦しいスクリプトに進化するのを防ぐことを試みましたsedawkgrepもちろん動作しません。指定された名前と一致するプロセスを除くすべてのプロセスを終了します。

pkill必要な結果を提供するこのコマンドの簡単な修正版はありますか?

PS:ユーザーに一種のルート権限を与える倫理についての議論は避けたいと思います。

実行中のオペレーティングシステムはSolaris 10(利用可能な場合)です。

ベストアンサー1

これは、指定された名前を持つプロセスのリストとルートとして実行される特定の名前のプロセスのリストを作成し、2番目のリストにない最初のリストからcommプロセスを見つけて終了します。

#!/bin/ksh
if test $# != 1
then
    echo usage: "$0" processname
    exit 1
fi
pname="$1"
kill $(comm -23 <(pgrep "$pname"|sort -n) <(pgrep -u root "$pname"|sort -n))

おすすめ記事