ごく単純と思われる、サーバプログラムで、
《起 動》
↓
┌─→《接続要求待ち》 ← 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 するという策で回避。
バグなのかもしれないが、何かやらかしてなるべきしてこうなっているかも知れずで、よく判らないところですね。