いくつかの基本的なコマンドだけを実行すると考えてください。
ls
これで、上記のコマンドが実行されるとpidがありますか?それでは、そのPIDをどのように確認できますか?
私が試したとき
echo $!
ls コマンドの後、空の出力が返されます。
そして私が実行したとき
ls &
それから
echo $!
これで、lsコマンドのpidを提供します。
実際に以下の監査ログを見ると、このような問題が出てきます。
type=USER_CMD msg=audit(12/16/2014 17:15:36.201:68342) : user pid=19247 uid=enginst auid=enginst ses=4229 msg='cwd=/apps/oradump/ora_temp_rdbms/OH3 cmd=chmod -R 777 11203 terminal=pts/2 res=success'
type=USER_CMD msg=audit(12/16/2014 17:36:33.968:68753) : user pid=1801 uid=enginst auid=enginst ses=4229 msg='cwd=/apps/oracle/RDBMS cmd=chmod -R 777 11203 terminal=pts/2 res=success'
ここで、上記のログは、「chmod -R 777」がユーザーエンジンによって実行され、pidもあることを示しています。
auditdログにppid(親プロセスID)が表示されないため、chmodコマンドがユーザーによって明示的に実行されたと結論付けることができます。一部のスクリプト/プログラムがこれを起動した場合も同様ですか?
さて、上記を確認するために、Process Accountingを開いてみました。しかし、どちらにしても私の質問は...
chmodやlsなどのコマンドが実行されたときにpidを取得しますか?それとも?それとも、前景ではなくバックグラウンドで実行されたときにPIDを取得しますか?
答え1
すべての外部コマンドとすべてのサブシェルには独自のPIDがあります。シェル組み込み関数はありません。
終了したばかりの同期コマンドのPIDを提供する機能があるかどうかわかりません。もちろん、次のようにすべてのコマンドを実行できます。
command & pid=$!; fg