Как я могу поставить процесс в фоновом режиме после его выполнения с разбитыми CTRL + Z? - PullRequest
10 голосов
/ 28 апреля 2009

Вопрос особенный, потому что некоторые клавиши, такие как CTRL + Z, перестали работать.

Я попытался перевести процесс в фоновый режим, набрав в следующем порядке:

  1. найти /
  2. CTRL + Z
  3. бг

Однако я все еще вижу стандартный вывод. Единственное отличие от первого шага состоит в том, что команда CTRL + Z больше не работает. Это довольно неприятно, когда у меня есть несохраненная работа, и мой жесткий диск превышает 100 ГБ Итак

как я могу поставить процесс на задний план?

[подробности]

Я использую четвертую версию Bash для Mac.

[Crux Ответ Николаса Райли]

Проблема действительно в том, что я не понимаю «разветвлений» запущенного процесса фона. Я не могу понять, почему такие команды, как CTRL + Z, не работают с фоновыми процессами. Я все еще смог убить процесс в другой оболочке с помощью команды:

ps -ej | awk '! /grep/ && /find/ {print $2}' | xargs kill -9

Ответы [ 8 ]

12 голосов
/ 28 апреля 2009

^Z не работает, потому что теперь главной задачей является оболочка, а оболочки обычно не отвечают на SIGTSTP. (Если вы действительно хотите приостановить оболочку без входа в систему, suspend обычно работает.)

Кажется, проблема в том, что вы неправильно понимаете последствия работы в фоновом режиме. Перенаправление стандартного вывода задания не связано.

На самом деле, неясно что вы хотите сделать. Если вы просто хотите остановить запуск find, тогда fg it и используйте ^C или ^\ (которые по умолчанию отправляют SIGINT и SIGQUIT соответственно).

Если вы хотите, чтобы find работал, но подавлять его дальнейший вывод, то самое простое решение, о котором я могу подумать, - это использовать bg ; disown ; exit. Это остановит оболочку от уничтожения дочернего процесса (find) и выхода из оболочки; предполагая, что он находится на верхнем уровне окна терминала, вы увидите немного больше вывода, и find продолжит работу (но у вас не будет возможности взаимодействовать с ним).

6 голосов
/ 28 апреля 2009

Я использую отречение.

find / & disown
exit # close the terminal and the command still runs

Вы также можете использовать disown после ^ Z:

find /
^Z
bg
disown
exit

Я считаю, что disown - это встроенный bash. Не уверен насчет альтернатив для других оболочек.

Для получения дополнительной информации см. мой эквивалентный ответ о сбое сервера .

5 голосов
/ 28 апреля 2009

Фоновая обработка процесса не приведет к отключению вывода от оконечного устройства, поэтому вы все еще видите вывод, и вывод может содержать управляющие символы, которые могут заполнить ваши настройки TTY (cat использование двоичных файлов - хороший способ сделать это).

Если вы хотите, чтобы работа выполнялась в фоновом режиме, сделайте это правильно:

find / >/tmp/out 2>&1 &

затем проверьте файл /tmp/out, когда он будет завершен.

5 голосов
/ 28 апреля 2009

Вы можете установить операцию для другого ключа с помощью stty в любой UNIX-подобной системе.

$ stty susp Q

сделает Q вашим ключом приостановки вместо CTRL-Z.

2 голосов
/ 28 апреля 2009

Я обычно так делаю с nohup. Как это:

nohup find /> /tmp/myresults.txt &

nohup гарантирует, что процесс не остановится, даже если консоль уходит (например, вы закрываете окно или теряете SSH или что-то еще). «>» Отправляет вывод в файл, а не в консоль, а «&» переводит задание в фоновый режим.

0 голосов
/ 24 февраля 2011

kill -STOP your_pid_here

из другого окна консоли?

http://tombuntu.com/index.php/2007/11/23/how-to-pause-a-linux-process/#comment-132413

0 голосов
/ 28 апреля 2009

Я знаю, что в Ubuntu 9.04 вы можете запустить процесс с & после него, чтобы запустить его в фоновом режиме. Например, «sudo gedit /boot/grub/menu.lst &» запустит текстовый редактор, редактирующий файл конфигурации GRUB в фоновом режиме.

0 голосов
/ 28 апреля 2009

Я предполагаю, что вы используете общий вариант Linux или UNIX и, возможно, оболочку bash. В каком случае:

CTRL-Z отправляет сигнал SIGTSTP на передний план процесса. Вы должны быть в состоянии сделать то же самое с командой kill, указав kill -s SIGTSTP [pid].

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...