Виведіть на перший план роботу nohup


14

Розглянемо наступне nohupвиконання:

nohup script.sh > script.out &

Чи є спосіб вийти з терміналу, підключитися, повернути процес на перший план і взаємодіяти з ним за допомогою клавіатури?

Відповіді:


7

Якщо ви хотіли запустити скрипт, чи запустіть його без виходу, що турбує ваш термінал, а потім піднесіть його до пізніше для взаємодії з ним, ви можете заглянути в термінальний мультиплексор. Залежно від вашої системи я б рекомендував tmuxабо screen. Інформацію про їх використання можна знайти за посиланнями нижче:

tmux:

екран:

редагувати: додані посилання для праймерів tmux


+1 Відмінний інструмент, про який я не знав. Велике дякую.
Адам Матан

19

nohup не відключає команду від терміналу, вона робить ваш скрипт ігнорованимSIGHUPта перенаправляєstdout/stderrу файлnohup.out, щоб команда могла продовжувати працювати у фоновому режимі після виходу.

nohupне автоматично ставить команду, яку вона виконує у фоновому режимі. Це потрібно зробити явно, закінчивши командний рядок з &.

$ nohup ./script.sh &
[1] 3390
$ nohup: ignoring input and appending output to ‘nohup.out’

jobsможе друкувати поточні завдання та їх статус. Якщо команда jobsне може її знайти, то це вже не є дочірнім процесом цієї оболонки.

$ jobs 
[1]+  Running                 nohup ./script.sh &

Можна повернути фонове завдання на перший план в баші, використовуючи fgнавіть якщо він виконується з nohup. Але це не змінить перенаправлення виводу, яке все одно буде переходити у файлnohup.out .

$ fg
nohup ./script.sh

Якщо закрити оболонку / термінал або вийти з системи, ваша команда більше не є дочірньою оболонкою. Це належить до initпроцесу. Якщо здійснити пошук, pstreeви побачите, що зараз йому належить процес 1 ( init). Це неможливо повернути на перший план, оскільки переднього плану більше не існує.


If the command jobs cannot find it, then it is no longer a child process of that shell.Це неправильно: спробуйте цю послідовність , щоб побачити , як: sleep 100 & disown ; echo Jobs:; jobs; echo Tree:; pstree -ap $$. Після цієї команди ви все одно побачите sleepроботу з тим самим PID, який було надруковано, коли ви його породили, при jobsцьому нічого не буде надруковано. Єдиний спосіб, коли дочірній процес може перестати бути дитиною, - це втратити свого батька (тоді сирота стає дитиною init) або роздвоєння + вихід (але тоді PID змінюється, тому це не первісна дитина).
Руслан

4

Я вдруге використаю термінальний мультиплексор, але tmux , а не екран. Екран для всіх намірів і цілей не підтримується. Його конфігурація - це темне мистецтво, ймовірно, вперше записане в додатку Necronomicon. Спроба написати власну конфігурацію - це лише погляд Ктулу. Серйозно. Огляньте файли .screenrc людей . Щоб бути впевненим, існують способи опосередкувати неприємність екрану конфігурації. Byobu виконує чудову роботу, як завіса між смертними користувачами та нечестивим кодом. Він оснащений розумними кольорами, інтерфейсом меню та, можливо, найголовніше, рядком стану.

Але, як я вже сказав, рекомендую натомість tmux . Він все ще потребує незначної конфігурації, але він добре задокументований , і ваш конфігураційний файл не буде схожий на хитрість. Крім того, ви починаєте з кольорів та рядка стану. Порівняйте файли screenrc і tmux.conf:


0

Якщо ви просто зацікавлені в огляді шапки в реальному часі, це може вам підійти:

nohup script.sh 2>&1 script.out &
# later:
tail -f script.out

0

Будь-яка команда Linux може бути надіслана на задній план із &додаванням ' ' останнього.

Щоб переглянути всі фонові завдання, ви можете опублікувати jobs

jobs
[1]  + suspended  nohup sh zookeeper-server-start.sh ../config/zookeeper.properties
[2]    running    nohup sh kafka-server-start.sh ../config/server.properties
[3]  - running    nohup sudo mongod --dbpath=/var/lib/mongodb

Тут я займаю 3 роботи у фоновому режимі: зоопарк, кафка та демон монго. [1], [2] та [3] - відповідні номери завдань для цих завдань.

Ви можете вивести ці завдання на перший план, використовуючи fg %$taskNumber.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.