Run parallel multiple commands at once in the same terminal

前端 未结 6 711
礼貌的吻别
礼貌的吻别 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:28

    It can be done with simple Makefile:

    sleep%:
            sleep $(subst sleep,,$@)
            @echo $@ done.
    

    Use -j option.

    $ make -j sleep3 sleep2 sleep1
    sleep 3
    sleep 2
    sleep 1
    sleep1 done.
    sleep2 done.
    sleep3 done.
    

    Without -j option it executes in serial.

    $ make -j sleep3 sleep2 sleep1
    sleep 3
    sleep3 done.
    sleep 2
    sleep2 done.
    sleep 1
    sleep1 done.
    

    You can also do dry run with `-n' option.

    $ make -j -n sleep3 sleep2 sleep1
    sleep 3
    sleep 2
    sleep 1
    
    0 讨论(0)
  • 2020-11-28 19:31

    I am suggesting a much simpler utility I just wrote. It's currently called par, but will be renamed soon to either parl or pll, haven't decided yet.

    https://github.com/k-bx/par

    API is as simple as:

    par "script1.sh" "script2.sh" "script3.sh"
    

    Prefixing commands can be done via:

    par "PARPREFIX=[script1] script1.sh" "script2.sh" "script3.sh"
    
    0 讨论(0)
  • 2020-11-28 19:35

    Based on comment of @alessandro-pezzato. Run multiples commands by using & between the commands.

    Example:

    $ sleep 3 & sleep 5 & sleep 2 &
    

    It's will execute the commands in background.

    0 讨论(0)
  • 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.

    0 讨论(0)
  • 2020-11-28 19:41

    Use GNU Parallel:

    (echo command1; echo command2) | parallel
    parallel ::: command1 command2
    

    To kill:

    parallel ::: command1 command2 &
    PID=$!
    kill -TERM $PID
    kill -TERM $PID
    
    0 讨论(0)
  • 2020-11-28 19:53

    To run multiple commands just add && between two commands like this: command1 && command2

    And if you want to run them in two different terminals then you do it like this:

    gnome-terminal -e "command1" && gnome-terminal -e "command2"
    

    This will open 2 terminals with command1 and command2 executing in them.

    Hope this helps you.

    0 讨论(0)
提交回复
热议问题