kill
명령줄에서 사용 하면 작동합니다.
kill -SIGSTOP 1234
하지만 bash 스크립트 파일에서 사용하면 다음 오류가 발생합니다.
kill: SIGSTOP: invalid signal specification
sh 파일은
#!/bin/sh
kill -SIGSTOP 1234
kill
Bash 스크립트에서 어떻게 사용합니까? 나는 이것을 시도했습니다 :
#!/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