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
더 이상 대상 프로그램과 중복되지 않습니다.
잘못된 프로세스에 신호를 보내고 있습니다.
추가 읽기
- 조나단 데보인 폴라드(2014). “20년 전에 PAM이 모든 것을 바꿔 놓았습니다.”.사용자 권한을 제거하기 위해 su를 남용하지 마십시오.. 일반적인 답변.
- sudo + exec를 어떻게 수행하나요?