예를 들어
#!/bin/bash
while :
do
sl
done
이 bash 스크립트를 종료하는 방법?
ctrl-c
보내 SIGINT
(대부분의 쉘에서) 신호를하거나 눌러 ctrl-z
즉 전송 SIGTSTP
(대부분의 쉘에서) 신호를. 누른 ctrl-z
경우 관련 프로세스가 종료되지 않고 일시 중지됩니다. 당신은 fg
(최소한에 bash
)
예를 들어
#!/bin/bash
while :
do
sl
done
이 bash 스크립트를 종료하는 방법?
ctrl-c
보내 SIGINT
(대부분의 쉘에서) 신호를하거나 눌러 ctrl-z
즉 전송 SIGTSTP
(대부분의 쉘에서) 신호를. 누른 ctrl-z
경우 관련 프로세스가 종료되지 않고 일시 중지됩니다. 당신은 fg
(최소한에 bash
)
답변:
프로그램은 sl
의도적으로 무시합니다 .이 키 SIGINT
를 누르면 전송됩니다 Ctrl+C. 따라서 먼저 인수 를 추가하여 sl
무시하지 말라고 지시 해야합니다 .SIGINT
-e
이 방법을 시도하면 각 개인을 중지 할 수 sl
있지만 여전히 반복됩니다. 당신 은 또한 bash
종료 후 알려야 합니다 SIGINT
. trap "exit" INT
루프를 앞에 두어이 작업을 수행 할 수 있습니다 .
#!/bin/bash
trap "exit" INT
while :
do
sl -e
done
Ctrl-Z
스크립트를 일시 중지하려면을 누르십시오kill %%
이 명령 %%
은 bash 내장 kill
에 프로세스 ID가 아니라 현재 쉘에서 가장 최근에 일시 중단 된 백그라운드 작업에 신호 (기본적으로 SIGTERM)를 보내도록 지시합니다 .
번호 나 이름으로 작업을 지정할 수도 있습니다. 당신이 ^ Z와 작업을 중단 할 때 예를 들면, 배쉬는 작업 번호가 같은과 무엇이 당신을 말할 것이다 [n]+ Stopped
, n
대괄호 안에이 작업 번호입니다.
실행 작업 제어에 죽이는 작업에 대한 추가 정보를 보려면 help jobs
, help fg
, help bg
, 그리고 help kill
bash는, 및 검색 JOB CONTROL
(모두 대문자) 또는 jobspec
bash는 남자 페이지에서.
예 :
$ ./killme.sh ./killme.sh : 라인 4 : sl : 명령을 찾을 수 없음 ./killme.sh : 라인 4 : sl : 명령을 찾을 수 없음 ./killme.sh : 라인 4 : sl : 명령을 찾을 수 없음 ./killme.sh : 라인 4 : sl : 명령을 찾을 수 없음 ./killme.sh : 라인 4 : sl : 명령을 찾을 수 없음 ... ... ... ./killme.sh : 라인 4 : sl : 명령을 찾을 수 없음 ^ Z [1] + 중지됨 ./killme.sh $ 킬 %% $ [1] + 종료 됨 ./killme.sh
이 예에서 작업 번호는 1이므로 kill %1
다음과 동일하게 작동 했을 것입니다.kill %%
(참고 : sl
설치 하지 않았 으므로 출력은 "명령을 찾을 수 없음"입니다. 귀하의 경우 sl 출력이 무엇이든 얻을 수 있습니다. 중요하지 않습니다- ^Z
일시 중단과 kill %%
동일하게 작동합니다)
sl
루프에서 실행되는 프로그램 ( )으로 보내지 지만 스크립트는 계속 실행되고 다른 시작 sl
됩니다. ^ C를 몇 번이나 빠르게 누르면 sl
, 스크립트와 스크립트를 모두 죽일 수 있습니다 (둘 중 어느 것도 SIGINT 를 잡지 않으면 ). ^ Z는 스크립트를 거의 즉시 중단 할 것입니다 (여전히 터미널로 인쇄되는 버퍼링 된 출력을 세지 않으면)kill %%
sl
재미있는 프로그램이다" 라고 말해야 합니다. 이번에는 또 재미 있어요! @ _ @
The symbols %% and %+ refer to the shell's notion of the current job, which is the last job stopped while it was in the foreground or started in the background. The previous job may be referenced using %-. If there is only a single job, %+ and %- can both be used to refer to that job
이 스크립트를 시작한 터미널에서 Ctrl + C를 눌러 해당 스크립트를 종료 할 수 있습니다. 물론이 스크립트는 포 그라운드에서 실행해야하므로 Ctrl + C로 중지 할 수 있습니다.
또는 열린 다른 터미널에서 해당 스크립트의 PID (프로세스 ID)를 찾을 수 있습니다.
ps -ef | grep <name_of_the_script>
kill -9 <pid_of_your_running_script>
두 가지 방법 모두 당신이 요구하는 트릭을 수행해야합니다.
while [ true ]
do
#check if script is running
ps | grep script_name.sh | grep -v grep >/dev/null 2>&1
if [ "$!" != "0" ] ; then
break
else
kill -9 ` ps -ef | grep script_name.sh | cut -d "a" -f 1`
echo "kill -9 `get script PID`"
fi
done
도움이 될 것입니다.
스크립트를 두 번 실행 해야하는 경우 지금은 결코 없기 때문에 살해는 끔찍합니다. 종료 코드가 잘못되었습니다.
while [ something ]; do
if [ somethingelse ]; then
echo shut down script with exit code 0
exit 0
fi
done
echo something else not happend
exit 2 # Return val important for example for monitoring
더 작동하지 않습니다. 해결책 = 펄을 사용하십시오. 자신의 bash를 여는 동안