GNU/Linux >> Znalost Linux >  >> Linux

Spusťte paralelně více příkazů najednou ve stejném terminálu

Tento bash skript je pro N paralelních vláken. Každý argument je příkaz.

trap zabije všechny podprocesy, když je zachycen SIGINT.
wait $PID_LIST čeká na dokončení každého procesu. Po dokončení všech procesů se program ukončí.

#!/bin/bash

for cmd in "[email protected]"; 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";

Uložte tento skript jako parallel_commands a učinit jej spustitelným.
Tento skript se používá takto:

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

Příklad:

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

Zahajte 4 paralelní režim spánku a počkejte, dokud neskončí „spánek 4“.


Na základě komentáře @alessandro-pezzato. Spusťte vícenásobné příkazy pomocí & mezi příkazy.

Příklad:

$ sleep 3 & sleep 5 & sleep 2 &

Bude provádět příkazy na pozadí.


Použijte GNU Parallel:

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

Zabít:

parallel ::: command1 command2 &
PID=$!
kill -TERM $PID
kill -TERM $PID

Linux
  1. 10 nejlepších webových stránek pro provoz Linuxu ve webovém prohlížeči

  2. 3 triky, jak získat výstup více příkazů ve stejném řádku

  3. Jak spustím více příkazů na pozadí v bash na jednom řádku?

  1. Jak spustit příkaz na pozadí se zpožděním?

  2. Spusťte AVD a VirtualBox současně

  3. Vytvořte nové okno terminálu se stejným adresářem jako předchozí okno

  1. 8 strašidelných příkazů, které pronásledují terminál

  2. Jak spustit jeden příkaz na více vzdálených systémech najednou

  3. Spustit příkaz Sudo a zadat heslo na stejném řádku?