Run parallel multiple commands at once in the same terminal

前端 未结 6 775
礼貌的吻别
礼貌的吻别 2020-11-28 19:15

I want to run a few commands, each of which doesn\'t quit until Ctrl-C is pressed. Is there something I can run to run all of them at once, and Ctrl-C will quit them all? Th

6条回答
  •  無奈伤痛
    2020-11-28 19:36

    This bash script is for N parallel threads. Each argument is a command.

    trap will kill all subprocesses when SIGINT is catched.
    wait $PID_LIST is waiting each process to complete. When all processes have completed, the program exits.

    #!/bin/bash
    
    for cmd in "$@"; do {
      echo "Process \"$cmd\" started";
      $cmd & pid=$!
      PID_LIST+=" $pid";
    } done
    
    trap "kill $PID_LIST" SIGINT
    
    echo "Parallel processes have started";
    
    wait $PID_LIST
    
    echo
    echo "All processes have completed";
    

    Save this script as parallel_commands and make it executable.
    This is how to use this script:

    parallel_commands "cmd arg0 arg1 arg2" "other_cmd arg0 arg2 arg3"
    

    Example:

    parallel_commands "sleep 1" "sleep 2" "sleep 3" "sleep 4"
    

    Start 4 parallel sleep and waits until "sleep 4" finishes.

提交回复
热议问题