nohup이 있습니다. nousr1 명령이 있습니까?


12

내 정기적 인 프로그램 중 일부가 "사용자 정의 신호 1"메시지와 함께 정기적으로 충돌합니다. 나는 nohup명령 이 있다는 것을 알고 있지만 nousr1명령이 있습니까? 아니면 nohupUSR1 과 같은 것을 할 것 입니까?


3
더 나은 질문은 처음에 usr1 신호를 보내는 것입니까? 아무것도 없으면 종료 메시지가 단순히 오도 될 수 있습니다.
Grant

2
"일반 프로그램"에 심각한 문제가있을 수 있습니다. 단순히 신호를 비활성화하면 기본 응용 프로그램이 올바르게 작동하지 않거나 작동하지 않을 수 있습니다. 사물을 비활성화하기 전에 환경을주의 깊게 검사하는 것이 좋습니다.
mdpc

@Grant : 동의합니다. 이 신호를 보내는 것이 무엇인지 알려주는 유틸리티가 있습니까?
user2624632

답변:


3

간단한 해키 솔루션에 유틸리티 유사한을 가지고 nohup있지만, 대한 SIGUSR1의 복사본을 얻을 것 로 coreutils 소스를 수행 압축을 푼다

sed -i 's/SIGHUP/SIGUSR1/' /path/to/coreutils/src/nohup.c

선택적으로 출력 파일 이름도 변경하십시오.

sed -i 's/nohup\.out/nousr1.out/g' /path/to/coreutils/src/nohup.c

이 소스를 컴파일하고 새로 컴파일 된 nohup바이너리를 /usr/bin/nousr1다음 위치에 설치하십시오 .

cp /path/to/coreutils/src/nohup /usr/bin/nousr1

내가 검사로이 후, sleep 1000에 종료 USR1, 동안은 nousr1 sleep 1000이 신호에 영향을받지 않는다.


그런데의 주요 기능은 nohup프로세스를 터미널에서 분리 SIGHUP하여 처음에 보내지 않도록하는 것입니다 . 또한 신호 처리기를 설정한다는 것은 추가 보너스이지만 불필요합니다.
Simon Richter

@SimonRichter에서 signal(SIGHUP,SIG_IGN);통화 를 제거 nohup.c하면 프로세스 에이 ( 가) 수신됩니다 SIGHUP. 어떤 nohup신호를 무시 제외하는 일은 단지 비 종단 표준 입력 파일과, 표준 출력, 열려진 디스크립터를 재개한다. 터미널에서 프로세스를 특별한 방식으로 분리하지 않습니다. 즉, SIGHUP터미널이 전화를 끊으면 프로세스가 전송 됩니다. 다른 측면에서이와 유사한 일을 bash는,의 disown명령,하지만 난 확실히 어떻게하지 않다 구현 - 어쩌면 당신 말은 길.
Ruslan

이것은 잘 작동하는 것 같습니다.
user2624632

8

trap내장 명령은 어떻습니까?

trap 'echo "Thou shalt not USR1 me"' USR1 

좋은 생각이지만 작동하지 않았습니다. 어쨌든 프로세스는 "사용자 정의 신호 1"로 종료되었습니다.
user2624632

신호 처리기 (SIG_IGN 및 SIG_DFL 이외)는 자식 프로세스에서 상속 되지 않습니다 .
aecolley

2

trap공백 인수와 함께 명령 형식을 사용해야합니다 . 이 시도:

trap '' SIGUSR1; myprogram

이것은 당신이하려고하는 SIGUSR1 신호를 무시 합니다. 나는 의견을 말하는 사람들에게 동의하지만 눈을 만나는 것보다 여기에 더 많은 일이있을 것입니다.

잘못된 양식 :

trap 'echo ...' SIGUSR1; myprogram

여전히 myprogramSIGUSR1을 수신 하도록 허용 하지만 쉘은 명령 echo에서 from 을 실행합니다 trap.


이것은 잘 작동하는 것 같습니다.
user2624632

죄송합니다. 너무 빨리 말씀하셨습니다. 나는 달리고 trap '' SIGUSR1; gvimdiff file1 file2있었고 Vim은 "Vim : Caught deadly signal USR1"으로 죽었다.
user2624632

흠, code.google.com/p/vim/source/browse/src/os_unix.c 의 소스 코드를 보면 VIM이 USR1 신호를 다시 활성화하여 치명적인 오류로 취급하는 것 같습니다. OS가 USR1 신호 전달을 거부하도록 할 수 있다면 유일한 희망이 될 것입니다. 그 기능을 제공 할 수있는 것이 있는지 모르겠습니다.
Adrian Pronk


Adrian Pronk : Vim만이 아닙니다. 또한 Firefox, Aqualung, Thunderbird 및 기타도 있습니다. 그러나 Konsole과 같은 다른 앱은 영원히 실행되지 않습니다.
user2624632
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.