Kill: SIGSTOP: bash 스크립트의 잘못된 신호 사양 오류

Kill: SIGSTOP: bash 스크립트의 잘못된 신호 사양 오류

kill명령줄에서 사용 하면 작동합니다.

kill -SIGSTOP 1234

하지만 bash 스크립트 파일에서 사용하면 다음 오류가 발생합니다.

kill: SIGSTOP: invalid signal specification

sh 파일은

#!/bin/sh
kill -SIGSTOP 1234

killBash 스크립트에서 어떻게 사용합니까? 나는 이것을 시도했습니다 :

#!/bin/sh
/bin/bash -c "kill -SIGSTOP 1234"

하지만 작동하지 않습니다.

답변1

이것표준(POSIX) 구문예:

kill -s STOP "$pid"

즉, SIG접두어가 없습니다. 일부 쉘 구현은 이를 확장으로 지원하지만 이는 표준이거나 이식 가능하지 않습니다 kill -s SIGSTOP.kill -SIGSTOP

UNIX 사양(POSIX+XSI)에서는 다음도 허용합니다.

kill -STOP "$pid"

그리고

kill -19 "$pid"

하지만 어떤 신호 번호가 SIGSTOP지정되지 않았으며 시스템 간에 또는 동일한 시스템의 아키텍처 간에도 다를 수 있으므로 피해야 합니다.

답변2

나는 같은 문제에 직면하고 있습니다. 여기에 있는 답변 중 어느 것도 문제의 실제 원인을 다루지 않습니다. 스크립트 내부에서 kill사용되는 것은 내장된 것입니다.쉘에서 제공, 이것이 바로 오류가 발생하는 이유입니다. 터미널에서 kill에 있는 별도의 실행 파일을 사용하십시오 /bin/kill. 이 문제를 해결하려면 /bin/kill스크립트에 내장된 버전 대신 셸 버전을 명시적으로 사용해야 합니다 . 그래서 당신은 다음과 같이 씁니다:

#!/bin/sh
/bin/kill -s SIGHUP 14344

답변3

첫째: SIGSTOP프로세스가 일시적으로 중지되지만 SIGCONT나중에 시스템 호출을 사용하여 계속할 수 있도록 메모리에 유지됩니다. 다음 작은 조각을 사용하여 무슨 일이 일어나는지 확인할 수 있습니다.

#!/bin/bash

set -x

sleep 100 &
pid=$!
kill -s SIGSTOP "$pid"
sleep 2
kill -s SIGCONT "$pid"

스크립트가 대화형으로 수행하는 작업을 확인할 수 있습니다.

따라서 Shebang을 사용하여 스크립트가 작동하도록 하려면 #/bin/sh다음과 같은 작업을 수행해야 합니다.

#!/bin/sh

set -x
set +o posix
sleep 100 &
pid=$!
kill -s SIGSTOP "$pid"
sleep 2
kill -s SIGCONT "$pid"
set -o posix

관련 정보