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
и захватывает его идентификатор процесса. Затем он выводит соответствующие подробности процесса перед тем, как завершить процесс.
После небольшого ожидания он проверяет таблицу процессов, чтобы узнать, завершился ли процесс. Как видно из вывода скрипта, он действительно исчез:
===
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
===