4

Можно ли отправить сигнал SIGTERM (или другой) процессу внутри ssh, например:

ssh hostname 'sleep 10; echo done'

Что я могу сделать, чтобы прервать команду сна? Если я нажимаю ctrl-c, команда ssh прерывается.

3 ответа3

2

Можно распространить ctrl+c через удаленный процесс, реализовав преобразователь "EOF в SIGHUP" через именованный канал на удаленном хосте (см. Команда ssh неожиданно продолжается в другой системе после завершения работы ssh).

ssh localhost '
TUBE=/tmp/myfifo.fifo
rm -f "$TUBE"
mkfifo "$TUBE"
<"$TUBE" sleep 100 &  appPID=$!
dd of="$TUBE" bs=1 2>/dev/null
kill $appPID
#kill -TERM -- -$$  # kill entire process group
rm -f "$TUBE"
'
0

-t может делать то, что вы хотите (см. https://superuser.com/a/20708/36198). К сожалению, если вы также хотите прочитать стандартный ввод, вам нужно сделать это в два этапа, только с Ctrl+C для второго, например

tmp=$(bzcat foo.bz2 | ssh $user@$host '
    t=$(mktemp -t foo.XXXXXXXXXXX);
    cat >"$t";
    echo "$t";
')
ssh -t $user@$host "./cmd \"$tmp\""
ssh $user@$host "rm -f \"$tmp\""    
0

Если бы вы знали pid удаленного процесса, вы могли бы сделать: ssh hostname 'kill -TERM $pid'

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .