Вопрос особенный, потому что некоторые клавиши, такие как CTRL + Z, перестали работать.
Я попытался перевести процесс в фоновый режим, введя порядок:
Однако, я все еще вижу stdout. Единственное отличие только от первого шага состоит в том, что команда CTRL + Z больше не работает. Это довольно неприятно, когда у меня есть несохраненные задания, а мой жесткий диск - более 100 ГБ. Итак,
как я могу поместить процесс в фоновый режим?
[Подробности]
Я использую четвертую версию Bash на Mac.
[Crux Reply by Nicholas Riley]
Проблема в том, что я не понимаю "последствия" для запуска фонового процесса. Я не могу понять, почему commnands, такие как CTRL + Z, не работают с фоновыми процессами. Я все еще мог убить процесс в другой оболочке командой:
ps -ej | awk '! /grep/ && /find/ {print $2}' | xargs kill -9
Ответ 1
^Z
не работает, потому что переднее задание теперь является оболочкой, а оболочки обычно не реагируют на SIGTSTP
. (Если вы действительно хотите приостановить оболочку без входа, обычно работает suspend
.)
Проблема заключается в том, что вы неправильно понимаете последствия работы в фоновом режиме. Перенаправление стандартного вывода задания не имеет отношения.
На самом деле, неясно, что вы хотите сделать. Если вы просто хотите остановить find
от запуска, тогда fg
и используйте ^C
или ^\
(которые по умолчанию отправляют SIGINT
и SIGQUIT
соответственно).
Если вы хотите сохранить find
, но отключите его дальнейший вывод, самое легкое решение, о котором я могу думать, это использовать bg ; disown ; exit
. Это заставит оболочку убить дочерний процесс (find
) и выйти из оболочки; предполагая, что он находится на верхнем уровне окна терминала, вы увидите немного больше выходных данных, а find
будет работать (но вы не сможете взаимодействовать с ним).
Ответ 2
Я использую disown.
find / & disown
exit # close the terminal and the command still runs
Вы также можете отказаться от использования ^ Z:
find /
^Z
bg
disown
exit
disown - это bash встроенный, я считаю. Не уверены в альтернативах для других оболочек.
Для получения дополнительной информации см. мой эквивалентный ответ на ошибку сервера.
Ответ 3
Вы можете установить операцию на другой ключ со stty в любой UNIX-подобной системе.
$ stty susp Q
сделает Q вашим ключом приостановки вместо CTRL-Z.
Ответ 4
Фоновая обработка процесса не приведет к отключению вывода от терминального устройства, поэтому вы все еще видите вывод, и на выходе могут содержаться управляющие символы, которые могут набивать ваши настройки TTY (cat
двоичные файлы - хороший способ для этого).
Если вы хотите, чтобы задание выполнялось в фоновом режиме, сделайте это правильно:
find / >/tmp/out 2>&1 &
затем просмотрите файл /tmp/out
, когда он закончит.
Ответ 5
Обычно я делаю это с nohup. Вот так:
nohup find/" > /tmp/myresults.txt &
nohup гарантирует, что процесс не прекратится, даже если консоль уйдет (например, вы закрываете окно или теряете свой SSH или что-то еще). " > " Отправляет вывод в файл, а не в консоль, и "&" помещает задание в фоновом режиме.
Ответ 6
Предполагаю, что вы используете общий вариант Linux или UNIX и, возможно, оболочку bash. В этом случае:
CTRL-Z передает сигнал SIGTSTP
в процесс переднего плана. Вы должны сделать то же самое с командой kill, указав kill -s SIGTSTP [pid]
.
Ответ 7
Я знаю, что в Ubuntu 9.04 вы можете запустить процесс с помощью a и после него, чтобы запустить его в фоновом режиме. Например, "sudo gedit/boot/grub/menu.lst &" запустит текстовый редактор, редактирующий конфигурационный файл GRUB в фоновом режиме.
Ответ 8
kill -STOP your_pid_here
из другого окна консоли?
http://tombuntu.com/index.php/2007/11/23/how-to-pause-a-linux-process/#comment-132413