Так как Вы уже выполняете Arch на своем настольном компьютере, archiso
сценарии могли быть тем, что Вы ищете:
Archiso является маленьким набором сценариев удара, который способен к созданию полностью функционального Arch Linux базирующийся живой CD и образы USB. Это - очень универсальный инструмент, таким образом, это могло потенциально использоваться для генерации чего-либо от спасательных систем, дисков установки, к особому интересу живые системы CD/DVD/USB, и кто знает что еще. Проще говоря, если это вовлекает Arch на солнечном каботажном судне, это может сделать это. Основа и душа Archiso являются mkarchiso.
Для одновременного выполнения команд вы можете использовать разделитель команд и
.
~$ command1 & command2 & command3
Это запустит command1
, а затем запустит ее в фоновом режиме. То же самое с command2
. Затем он запускает command3
в обычном режиме.
Вывод всех команд будет искажен, но если это не проблема для вас, это будет решением.
Если вы хотите позже просмотреть вывод отдельно, вы можете направить вывод каждой команды в tee
, что позволит вам указать файл для зеркального отображения вывода.
~$ command1 | tee 1.log & command2 | tee 2.log & command3 | tee 3.log
Вывод, вероятно, будет очень беспорядочным. Чтобы противостоять этому, вы можете дать выходу каждой команды префикс, используя sed
.
~$ echo 'Output of command 1' | sed -e 's/^/[Command1] /'
[Command1] Output of command 1
Итак, если мы сложим все это вместе, мы получим:
~$ command1 | tee 1.log | sed -e 's/^/[Command1] /' & command2 | tee 2.log | sed -e 's/^/[Command2] /' & command3 | tee 3.log | sed -e 's/^/[Command3] /'
[Command1] Starting command1
[Command2] Starting command2
[Command1] Finished
[Command3] Starting command3
Это в высшей степени идеализированная версия того, что вы, вероятно, увидите. Но это лучшее, о чем я могу думать прямо сейчас.
Если вы хотите остановить их всех сразу, вы можете использовать встроенную ловушку
.
~$ trap 'kill %1; kill %2' SIGINT
~$ command1 & command2 & command3
Это выполнит command1
и command2
в фоновом режиме и command3
на переднем плане, что позволит вам убить его с помощью Ctrl + С .
Когда вы убиваете последний процесс с помощью Ctrl + C , kill% 1; Команды kill% 2
выполняются, потому что мы связали их выполнение с приемом INTerupt SIGnal, отправляемого нажатием Ctrl + C .
Они убивают соответственно 1-й и 2-й фоновые процессы (ваши command1
и command2
). Не забудьте удалить ловушку после того, как вы закончите свои команды, используя ловушку - SIGINT
.
Полный монстр команды:
~$ trap 'kill %1; kill %2' SIGINT
~$ command1 | tee 1.log | sed -e 's/^/[Command1] /' & command2 | tee 2.log | sed -e 's/^/[Command2] /' & command3 | tee 3.log | sed -e 's/^/[Command3] /'
Вы, конечно, можете взглянуть на экран . Это позволяет вам разделить вашу консоль на столько отдельных консолей, сколько вам нужно. Таким образом, вы можете отслеживать все команды по отдельности, но одновременно.
Вы можете использовать трубу
. Это начнет команды на любых концах трубы одновременно. Вы должны быть в состоянии остановить все команды с помощью Ctrl-C
.
1-я команда | 2-я команда |. 3RD Command
Если вы хотите запустить команды один за другим, вы можете использовать метод @ Serenesat.
Вы можете легко убить кучу процессов сразу, если вы устроите их для запуска (и только их) в той же группе процессов .
Linux предоставляет утилиту setsid
для запуска программы в новой группе процессов (в новой сессии, но мы не заботимся об этом). (Это выполнимо , но более сложный без Setsid
.) [1263135].)
ID группы процессов (PGID) группы процессов - это идентификатор процесса исходного родительского процесса в группе. Чтобы убить все процессы в группе процессов, пройдите отрицатель PGID в Убить
System Call или команд. PGID остается действительным, даже если исходный процесс с этим PID умирает (хотя это может быть немного запутанным).
setsid sh -c 'command1 & command2 & command3' &
pgid=$!
echo "Background tasks are running in process group $pgid, kill with kill -TERM -$pgid"
Если вы запускаете процессы в фоновом режиме из неинтерактивной оболочки, то они все останутся в группе процессов оболочки. Это только в интерактивных снарядах, которые фоновые процессы работают в собственной группе процессов. Поэтому, если вы вилее команды из неинтерактивной оболочки, которые остаются на переднем плане, Ctrl + C убьют их всех. Используйте ждут
встроенного, чтобы оболочку ждать всех команд для выхода.
sh -c 'command1 & command2 & command3 & wait'
# Press Ctrl+C to kill them all
Вы можете использовать точку с запятой ;
Или &&
, как это:
cmd1; cmd2 # Runs both the commands, even if the first one exits with a non-zero status.
cmd1 && cmd2 # Only runs the second command if the first one was successful.