exec() を使用して AC シミュレーションを実行する php スクリプトをデバッグするのに何時間も費やしました。どこにでも stderr 印刷メッセージをスローした後、根本的な問題は、sprintf() を使用して小さすぎる char 配列へのディレクトリ パスを印刷することであることが最終的にわかりました。
セグメンテーション違反だったと思いますが、「セグメンテーション違反」というシェル エラー メッセージを実際に見たことはありません。割り当てサイズを変更すると、すべてが機能しました。
stderr 出力をログ ファイルにリダイレクトしていましたが、そのログ ファイルは fprintf(stderr,"..."); からすべてのメッセージを取得しました。シェルエラーメッセージは表示されませんでした。
コマンドはこれ
exec("$cmd 2>> $logFile & $PROCFILE 1 $ipaddr $! 2>> $logFile", $output, $rv);
$cmd は AC シミュレーションを実行し、$PROCFILE は 3 つの引数 (1、$ipaddr、および $!) を取る 2 番目の C プログラムを実行します。割り当てサイズの問題を修正する前は、php スクリプトは $cmd シミュレーションの実行を停止し、次の行 (つまり、exec() ステートメントの後) に進みました。php ファイルの次の行は、
if(rv!=0){handle error}
しかし、それも問題をキャッチしませんでした。
権限エラーが発生していると考え続けました。シェルエラーを表示するために exec() を取得するにはどうすればよいですか? それとも、'&' を使用して 2 つのプログラムを同時に実行した結果ですか?