2023/02/26(日)perl で子プロセスで su を実行させると、親プロセスも道づれで消える
2023/02/26 18:32
《起 動》 ↓ ┌─→《接続要求待ち》 ← LAN・WANからの接続要求 │ ↓ │ 《接続応答》 │ ↓ │ 《子プロセスをfork()》→────┐ │ ↓(親プロセス) │(子プロセス) │ │ ↓ │ │ 《実処理》 │ │ │ | 《子プロセス終了待ち》←──《処理終了》 │ ↓ └←《次の接続を待つ》のような概略構造で、 root 権限で稼働させる代物だが、この構造で、子プロセス内で、perl にて
$status = system (/usr/bin/su username -c "exec comannd ... ") ;
または
$result = `/usr/bin/su username -c "exec comannd ... "`
みたいなことをやらせると、当該処理は実行するものの、実行後、親プロセスまでも終了してしまう。
どちらも更に子プロセスを起こし、 username 権限で実行するというところまでは各所に記載があるため判るが、処理終了時の動作については記載が見当たらず、これ以上の調査に時間を費やせないという現実。
結局、su をやめ、root 権限で動作させ、実行後、このプログラムで生成された必要なファイルを chown するという策で回避。
バグなのかもしれないが、何かやらかしてなるべきしてこうなっているかも知れずで、よく判らないところですね。