A Micro Toolbox

ソフトウェアのニッチな問題の対処記録です

sudoは子プロセスを作る

とあるコマンドをsudo経由で実行したらpsで2つプロセスが見えた。

 

純化した実行例:

$ sudo sleep 300 &
[1] 26061

$

$ ps -ef | grep [s]leep
root 26061 18849 0 18:44 pts/1 00:00:00 sudo sleep 300
root 26066 26061 0 18:44 pts/1 00:00:00 sleep 300
$

 

sudoのman pageにしっかり書いてあった。

https://linuxjm.osdn.jp/html/sudo/man8/sudo.8.html

sudo は、コマンドを実行するとき、まず fork(2) を呼び、 実行環境を上記のように設定してから、子プロセスで execve システムコールを呼び出す。 メインの sudo プロセスは、コマンドが完了するまで wait し、完了したら、 コマンドの終了ステータスをセキュリティポリシーの close 関数に渡してから、 終了する。