추가 읽기

추가 읽기

C++ 프로그램에 신호 처리기가 있습니다.

void term(int signum)
{
    cout << "in term" << endl;
    # Do Stuff
    exit(0);
}

int main(int argc, char *argv[])
{
    # Do Stuff
    signal(SIGINT, term);
    # Do Stuff
}

프로그램이 잘 작동합니다. 누르고 Ctrl+C나가면 기능항목으로 들어갑니다.

그러나 스크립트를 사용하여 해당 동작을 복제하려고 하면 작동하지 않습니다.

내가 실행 중인 스크립트의 단순화된 버전은 다음과 같습니다.

! /bin/bash
sudo ./program &
rpid=$!

sleep 2
sudo kill -INT $rpid
# sudo kill -TERM $rpid
# sudo kill $rpid

echo "killed"
wait $rpid

프로그램은 를 누를 때까지 용어 기능을 입력하지 않습니다 Ctrl+C. 무한정 대기상태로 멈춰있습니다.

답변1

% sudo sh -c 'exec echo 내 프로세스 ID는 $$입니다. ' & echo "Xyr 프로세스 ID는 $\!입니다."
[1]59130
Xyr 프로세스 ID는 59130입니다.
내 프로세스 ID는 59131입니다.
[1] + 완료 sudo sh -c 'exec echo 내 프로세스 ID는 $$입니다. '
%

플러그형 인증 모듈의 세계에 오신 것을 환영합니다! login, su및 같은 프로그램은 sudo더 이상 대상 프로그램과 중복되지 않습니다.

잘못된 프로세스에 신호를 보내고 있습니다.

추가 읽기

관련 정보