Programing

bash 스크립트에서 control + c를 보내는 방법은 무엇입니까?

lottogame 2021. 1. 8. 07:45
반응형

bash 스크립트에서 control + c를 보내는 방법은 무엇입니까?


bash 스크립트에서 여러 화면을 시작한 다음 runserver화면에서 django의 명령 을 실행 합니다. 나는 프로그래밍 보내달라고 요구하는뿐만 아니라, 그들 모두를 중지 할 수 있도록하고 싶습니다 Control+crunserver.

bash 스크립트에서 이러한 키 입력을 어떻게 보낼 수 있습니까?


Ctrl+CSIGINT신호를 보냅니다 .

kill -INT <pid>SIGINT신호도 보냅니다 .

# Terminates the program (like Ctrl+C)
kill -INT 888
# Force kill
kill -9 888

888프로세스 ID 라고 가정 합니다.


약간 다른 신호 kill 888보내지 SIGTERM만 프로그램을 중지하도록 요청합니다. 따라서 수행중인 작업을 알고 있다면 ( SIGINT프로그램에 바인딩 된 핸들러가 없음 ) 간단한 kill것으로 충분합니다.

스크립트에서 실행 된 마지막 명령의 PID를 얻으려면 다음을 사용하십시오 $!.

# Launch script in background
./my_script.sh &
# Get its PID
PID=$!
# Wait for 2 seconds
sleep 2
# Kill it
kill $PID

CTRL-C 일반적으로 SIGINT 신호를 프로세스에 전송하므로 다음을 수행 할 수 있습니다.

kill -INT <processID>

명령 줄 (또는 스크립트)에서 특정 processID.

대부분의 UNIX와 마찬가지로 거의 무한대로 구성 할 수 있기 때문에 "일반적으로"라고 말합니다. 를 실행 stty -a하면 intr신호에 연결된 키 시퀀스를 확인할 수 있습니다 . 아마도 CTRL-C그럴 것이지만 그 키 시퀀스는 완전히 다른 것에 매핑 될 수 있습니다.


다음 스크립트 프로그램이 작업에 (불구 TERM보다는 INT이후 sleep에 반응하지 않는 INT내 환경에서)

#!/usr/bin/env bash

sleep 3600 &
pid=$!
sleep 5

echo ===
echo PID is $pid, before kill:
ps -ef | grep -E "PPID|$pid" | sed 's/^/   /'
echo ===

( kill -TERM $pid ) 2>&1
sleep 5

echo ===
echo PID is $pid, after kill:
ps -ef | grep -E "PPID|$pid" | sed 's/^/   /'
echo ===

기본적으로 시간 로그 sleep프로세스를 시작 하고 프로세스 ID를 가져옵니다. 그런 다음 프로세스를 종료하기 전에 관련 프로세스 세부 정보를 출력합니다.

After a small wait, it then checks the process table to see if the process has gone. As you can see from the output of the script, it is indeed gone:

===
PID is 28380, before kill:
   UID   PID     PPID    TTY     STIME      COMMAND
   pax   28380   24652   tty42   09:26:49   /bin/sleep
===
./qq.sh: line 12: 28380 Terminated              sleep 3600
===
PID is 28380, after kill:
   UID   PID     PPID    TTY     STIME      COMMAND
===

You can get the PID of a particular process like MySQL by using following commands: ps -e | pgrep mysql

This command will give you the PID of MySQL rocess. e.g, 13954 Now, type following command on terminal. kill -9 13954 This will kill the process of MySQL.


    pgrep -f process_name > any_file_name
    sed -i 's/^/kill /' any_file_name
    chmod 777 any_file_name
    ./any_file_name

for example 'pgrep -f firefox' will grep the PID of running 'firefox' and will save this PID to a file called 'any_file_name'. 'sed' command will add the 'kill' in the beginning of the PID number in 'any_file_name' file. Third line will make 'any_file_name' file executable. Now forth line will kill the PID available in the file 'any_file_name'. Writing the above four lines in a file and executing that file can do the control-C. Working absolutely fine for me.

ReferenceURL : https://stackoverflow.com/questions/5789642/how-to-send-controlc-from-a-bash-script

반응형