よくわかりません。おそらく、man や他の多くのソースに基づいて、次のように: OS がプロセスを強制終了したときにコードを返す wait(&status) を使用すると、子プロセスの終了ステータスまたは戻り値を取得できるようになるはずです。
これらの 2 つのコード スニペットにより、その子の終了値を確認し、それを出力できるはずです。子プロセス関数:
int childFunction(char in[],char logPath[]){
FILE *logFile= fopen( logPath, "a" );
if(logFile==NULL)
return 1;
int c=system(in);
fclose(logFile);
return(c);
}
そしてメイン:
{...some unimportant code before this}
result= fork();
if(result==0){
exit(childFunction(inLine,logPath));
}
else if(result>0){
int status=0;;
int c=(int)waitpid(-1,&status,0);
printf("a:%d b:%d\n",status, WIFEXITED(status));
else
return -1;
i=0;
待って、しばらく寝て、出て、戻って、manページを数回読んでみました。この機能についての私の理解に基本的な誤りがあるか、4 時間見てもわからなくなってしまいました。
解決する なんらかの理由で、私は絶対に理解していませんが、return(c)
in childFunction をif(c!=)return(1);else return(0)
それに変更すると機能します。理由はわかりません。
解決済み 2 さて、今私は理由を知っていると思います. リターン コールまたは待機のいずれかによって、ステータスが最上位 8 ビット (256) に減少するようです。どういう意味ですか?つまり、通常の int を送信すると、最初のビットが使用され、最後の 8 ビットは破棄されます。同時に、return (1)
コンパイラを指定すると、int が short int に自動的に「短縮」されます。解決策は、短い数値を返すか、以前の「解決済み」コメントで行ったように実行することです。