Если вы хотите создать фоновую программу, используйте:
./program & # The & sends the command to the background
echo commands here are executed while program is in the background
…
wait # Wait for the completion of background commands
echo commands here are executed after background program has completed
Редактировать: Если вы намереваетесь остановить программу (как это часто делает ctrl-Z в * nix оболочках), вы можете отправить ему сигнал STOP:
kill -STOP pid
Чтобы возобновить выполнение, отправьте ему сигнал CONT:
kill -CONT pid
В каждом из этих примеров pid
- это идентификатор процесса программы. Если вы запустите его в скрипте, его легко получить с помощью переменной $!
, например,
./prog &
echo prog started in the background
pid_of_prog=$!
kill -STOP $pid_of_prog
echo prog stopped
kill -CONT $pid_of_prog
echo prog continues
wait
echo prog finished
Редактировать 2: Если ваша программа завершает работу при получении символа ctrl-Z, помните, что управляющие символы имеют числовое значение буквы позиции в алфавите (т.е. Ctrl-A 1, Ctrl-B 2 и т. д.). Чтобы отправить этого персонажа в программу, вы можете:
echo -e "\032" | ./prog
(032
- это 26, то есть ^ Z, в восьмеричном виде. Конечно, вы можете создать тот же символ любым способом, возможно, добавив его в конец другого ввода, например ( cat inputfile ; echo -e "\032" ) | ./prog
.
Но это не обязательно работает; программа должна быть спроектирована так, чтобы распознавать этот символ из входных данных (что, вероятно, не будет); обычно оболочка ловит его. С другой стороны, большинство программ, считывающих ввод с stdin
, просто завершают работу, когда ввод заканчивается, поэтому перенаправление любого конечного ввода (даже </dev/null
) должно привести к его завершению.
И, наконец, если целью было остановить выполнение программы, когда произошло какое-то другое событие (обнаруженное в другом месте скрипта), вы можете просто kill
it…