7

Когда я был в офисе, используя свой рабочий стол, я запускал скрипт run.sh в фоновом режиме 4 раза.

run.sh parameter1 &
run.sh parameter2 &
run.sh parameter3 &
run.sh parameter4 &

Затем я пришел домой и открыл терминал на своем ноутбуке, ssh на рабочий стол в моем офисе. Когда побежал ps -u jack , я увидел запущенные процессы:

 3562 pts/1    00:00:00 bash
 4540 pts/2    00:00:00 bash
 4643 pts/3    00:00:00 bash
 4748 pts/4    00:00:00 bash

Но когда я набрал jobs , я ничего не получил. Почему я мог видеть эти четыре запущенных фоновых процесса?

Кстати, как я могу вернуть их на свой текущий терминал, чтобы я мог убить одного из них, скажем, run.sh parameter4 &?

2 ответа2

14

Это связано с тем, что jobs отображает фоновые команды, запущенные из одной оболочки. Процессы оболочки, запущенные под вашим настольным терминалом и под ssh-терминалом, отличаются.

См. Http://www.gnu.org/software/bash/manual/html_node/Job-Control-Basics.html.

Чтобы иметь возможность управлять своими процессами как заданиями из разных терминалов, вы можете использовать screen или tmux которые в основном являются менеджерами виртуальных терминалов и могут повторно подключать их к любому количеству других терминалов.

Например, если вы только запускаете screen , он открывает оболочку по умолчанию и вы работаете с ней так же, как и с любой другой оболочкой. Затем, когда вы вернетесь домой и подключитесь по ssh к своей офисной машине, вы можете запустить screen -d -r чтобы отсоединить виртуальный терминал от настольного офисного терминала и подключить его к терминалу ssh, чтобы возобновить работу. Вы можете отсоединить виртуальный терминал от самого screen , нажав Ctrl-A, d.

5

Исходя из постановки задачи вопроса, ИМХО я не вижу никаких причин для использования background или foreground . Все, что вам нужно, - это найти процесс, работающий в фоновом режиме, чтобы вы могли его убить.

Запустите ps -ef | grep parameter3 чтобы найти процессы с parameter3 в имени процесса. Вы можете адаптировать grep для уникальной идентификации процесса, если у вас нет двух процессов с одинаковым именем процесса.

Как только он у вас есть, просто kill -9 PID и этот процесс будет убит. Так что нет необходимости выдвигать этот процесс на первый план, чтобы убить его.

Надеюсь это поможет.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .