ユーザーが実行したコマンドのプロセスID

ユーザーが実行したコマンドのプロセスID

いくつかの基本的なコマンドだけを実行すると考えてください。

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

関連情報