Reputation: 33459
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.
Upvotes: 2
Views: 3068
Reputation: 21
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
(you can add a sleep to the chain and go see it on the remote machine).
Upvotes: 2
Reputation: 1316
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.
Upvotes: 2