Linux 스크립트 명령은 신호 중단 시 종료 코드를 무시합니다.

Linux 스크립트 명령은 신호 중단 시 종료 코드를 무시합니다.

나는 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?

-ePS 내 응용 프로그램에서 런타임 오류를 일으키는 다른 것이 있는지 알고 싶기 때문에 플래그를 제거하고 싶지 않습니다 .

관련 정보