简体   繁体   中英

Why does pkill kill my SSH session?

I want to do something like this:

program='java'
ssh bob@mycomputer "pkill -f $program; echo 'Done!'";

But, it seems like pkill is killing my ssh (I never see Done! ). If I replace pkill with something else (say pwd ), it works as expected.

Well seems really a good case here. The -f flag uses the full path of terminal and if its unable to get the process then it kills all the processes it could like pkill -f / which includes ssh. Refer here .

If you try pkill without -f then it works. You can also check ssh verbose (ssh -v) to see what is happening in the background.

Hope it helps.

The chosen answer is wrong, if pkill -f does not find a matching process, it does not kill anything.

The real issue is that when you chain 2+ commands (either with ; or && ), the pkill -f matches with the chained command and kills it. You can verify this behaviour with pgrep :

> ssh bob@mycomputer 'pgrep -f <random_string>'
> ssh bob@mycomputer 'pgrep -f <random_string> ; echo foo'
<chained_command_pid>
foo

Chained command in this case would be $SHELL -c pgrep -f <random_string>; echo foo $SHELL -c pgrep -f <random_string>; echo foo (you can add a sleep to the chain and go see it on the remote machine).

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM