Як я можу розмістити поточний запущений процес Linux у фоновому режимі? [зачинено]


111

У мене є команда, яка завантажує файли за допомогою git на віддалений сервер із оболонки Linux, і на це піде багато годин.

Як я можу помістити цю програму на задній план? Так що я ще можу працювати над оболонкою, і цей процес також завершується?


Лише здогадка, але ви спробували ctrl + z або виконали команду так #command &
EralpB

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

Тоді нам слід почекати більш професійної відповіді :) Я мав на увазі, якщо у вас є шанс почати все заново. (Команда та річ)
EralpB

Прийнятий відповідь на це запитання пояснює три кроки, які потрібно зробити: stackoverflow.com/questions/625409/…
Леонард Саєр

Ви також можете просто відкрити другий екземпляр шпаклівки і знову підключитися до сервера, щоб отримати ще одну оболонку. Хоча рішення з ctrl+zвідмінним.
Ela782

Відповіді:


207

Припиніть процес CTRL + Z, а потім скористайтесь командою, bgщоб відновити його у фоновому режимі. Наприклад:

sleep 60
^Z  #Suspend character shown after hitting CTRL+Z
[1]+  Stopped  sleep 60  #Message showing stopped process info
bg  #Resume current job (last job stopped)

Більше про управління роботою та bgвикористання роботи на bashсторінці керівництва:

КОНТРОЛЬ РОБОТИ
Введення символу призупинення (зазвичай ^ Z, Control-Z) під час запуску процесу призводить до того, що процес зупиняється і повертає керування в bash. [...] Потім користувач може маніпулювати станом цього завдання, використовуючи команду bg, щоб продовжити його у фоновому режимі, [...]. A ^ Z набирає чинності негайно і має додатковий побічний ефект, який спричиняє відмову в очікуванні виводу та набрання голови.

bg [ jobspec ...] Відновіть
кожну роботу призупиненої роботиспецифікацією у фоновому режимі, як ніби вона була розпочата з &. Якщо jobspec відсутня, використовується поняття оболонки поточного завдання .

EDIT

Щоб почати процес, коли ви навіть можете вбити термінал, і він все ще продовжує працювати

nohup [command] [-args] > [filename] 2>&1 &

напр

nohup /home/edheal/myprog -arg1 -arg2 > /home/edheal/output.txt 2>&1 &

Щоб просто ігнорувати вихід (не дуже розумно), змініть ім'я файлу на /dev/null

Щоб отримати повідомлення про помилку, встановлене на інший файл, змініть на &1ім’я файлу.

Крім того: Ви можете скористатися jobsкомандою для перегляду індексованого списку цих фонових процесів. І ви можете вбити фоновий процес, запустивши kill %1або kill %2з числом, що є індексом процесу.


Я спробував це, але як щось виводить, він знову виходить на перший план,% показує, скільки даних завантажено
Mirage

Процес запише будь-який вихід у термінал, як ви доручили цьому зробити процес на початку. Вам доведеться перезапустити його, щоб отримати вихід для запису у файл або /dev/null. Див. Редагування вище.
Ed Heal

значить, якщо процес уже запущений, тоді немає способу перенаправити вихід
Mirage

Так, справді. Ви не можете впливати на процес лише з оболонки, з якої він запущений. Ви можете зробити це, kill -9 <pid of your shellі тоді процес все одно буде запущений, а вихід буде викинутий - але вам доведеться знову увійти, щоб запустити нову оболонку.
Ed Heal

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