Linux에서 프로세스를 종료하고 강제로 0을 반환합니까? 내가 알지 못하는 멋진 킬 신호가

Linux 환경에서 프로세스에 리턴 신호를 보내면서 프로세스에 종료 신호를 보내려면 어떻게해야합니까? 이것을 위해 멋진 GDB 마술을해야합니까, 아니면 내가 알지 못하는 멋진 킬 신호가 있습니까?

테스트 사례 :

cat; echo $?

killall cat

다양한 kill 신호를 시도하면 129, 137 및 143과 같은 다른 리턴 신호 만 제공됩니다. 제 목표는 스크립트가 실행되는 프로세스를 종료하지만 스크립트가 성공했다고 생각하게하는 것입니다.



답변

GDB 및 프로세스 ID를 사용하여 프로세스에 첨부 한 다음 인수로 call명령 을 발행 할 수 exit(0)있습니다.

call실행중인 프로그램 내에서 함수를 호출 할 수 있습니다. 호출 exit(0)은 리턴 코드 0으로 종료됩니다.

gdb -p <process name>
....
.... Gdb output clipped
(gdb) call exit(0)

Program exited normally.

한 줄 도구로 :

gdb --batch --eval-command 'call exit(0)' --pid <process id>

답변

쉘이이를 잡을 SIGCHLD때 무조건 리턴 값을 0이 아닌 값으로 적절하게 설정하므로 스크립트 나 쉘을 수정해야합니다.


답변

확실하지 않지만 나열된 신호 중 하나가 수신되면 0으로 종료됩니다. 함수 호출 등을 포함한 다른 작업을 수행 할 수 있습니다.

#!/bin/bash
trap 'exit 0' SIGINT SIGQUIT SIGTERM

답변

이 원 라이너는 나를 위해 일했습니다.

/bin/bash -c '/usr/bin/killall -q process_name; exit 0'

답변

조금 해 키지 만 ..

SIGCHLD 핸들러를 대체하여 프로세스에 랩퍼를 작성할 수 있습니다. 예를 들면 다음과 같습니다.

#!/bin/bash
set -o monitor
trap 'exit(0)' CHLD
/some/dir/yourcommand

그런 다음 스크립트를 프로세스 대신이 래퍼를 실행하도록 만들 수 있습니다.이 스크립트를 $ PATH에 넣고 이름을 바꾸면됩니다.