Search code examples
bashusage-statisticssimultaneous-calls

Exit second command based on exit of first command in parallelly executed commands


I want to run a command which is resource intesive and use another command to dump hardware stats while first command is running. I ofcourse want to stop the second one when first exits.

E.g.

ping 8.8.8.8 & dstat -T -f temp.csv

Obviously ping is not intensive but you get the picture.

With the above command the first exits but second part keeps on running. I want dstat to stop when ping ends. Also, important that this happens in one liner command.


Solution

  • Run dstat in the background, and save its PID in a variable. Then run ping in the foreground, and kill dstat when it finishes.

    dstat -T -f temp.csv &
    dstat_pid=$!
    long_running_command
    kill $dstat_pid