私はSIGINT信号を処理して正常に終了するCプログラムを実行するためにスクリプトコマンドを使用しています。私のCコードの小さな例:
#include <signal.h>
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
int interruptReceived = 0;
void handleInterrupt(int signalNumber)
{
printf("Interrupt received!\n");
interruptReceived = 1;
return;
}
int main(void)
{
signal (SIGINT,handleInterrupt);
while(!interruptReceived)
{
sleep(1);
}
exit(0);
}
アプリケーションを直接実行してCtrl + Cを押すと正常に動作します。
#> ./myApp; echo $?
^CInterrupt received!
0
しかし、Linuxコマンドで同じことを行うと明示的script
に使用したため、プロセス自体が正常に終了したにもかかわらず、終了コード1が返されます。exit(0)
#> script -qefc ./myApp; echo $?
^CInterrupt received!
1
SIGINTを受け取った後、コードが何度も実行されても終了コードは1のままです。信号がどこかにキャッシュされているようです。このキャッシュを消去する方法はありますか?または、コマンドを使用するときに正常に終了する方法はありますかscript
?
-e
PS私のアプリケーションでランタイムエラーを引き起こす他のものがあるかどうかを知りたいので、フラグを削除したくありません。