![Linux 스크립트 명령은 신호 중단 시 종료 코드를 무시합니다.](https://linux55.com/image/214824/Linux%20%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%20%EB%AA%85%EB%A0%B9%EC%9D%80%20%EC%8B%A0%ED%98%B8%20%EC%A4%91%EB%8B%A8%20%EC%8B%9C%20%EC%A2%85%EB%A3%8C%20%EC%BD%94%EB%93%9C%EB%A5%BC%20%EB%AC%B4%EC%8B%9C%ED%95%A9%EB%8B%88%EB%8B%A4..png)
나는 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 내 응용 프로그램에서 런타임 오류를 일으키는 다른 것이 있는지 알고 싶기 때문에 플래그를 제거하고 싶지 않습니다 .