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


11

Скажіть, я запускаю процес у терміналі, і він надсилає вихід до стандартної помилки, поки він працює. Я хочу перенести процес на другий план, а також при цьому заглушити його.

Чи є спосіб це зробити, не зупиняючи процес і запускаючи його знову, використовуючи &і > /dev/null 2>&1? Мені цікаво, чи є якась команда, яка виконує bg і може також змінити вихідні дескриптори цільового процесу.

Відповіді:


9

Запізно. Після запуску процесу оболонка не має більше контролю над дескрипторами файлів процесу, тому ви не можете замовчувати його командою оболонки.

Ви можете тільки спробувати вбитиSIGHUP процес. Якщо ваш процес обробляє це правильно , він повинен відірватися від контролю tty . На жаль, багато програмного забезпечення не справляються з ним правильно і просто гинуть.


Ви не можете зробити CTRL + Z, щоб поставити процес у фоновий режим? це не замовчує процес, і якщо ви вийдете, я думаю, що це теж вбиває процес.
Рой Ріко

1
@RoyRico, вбиваючиSIGSTOP процес (або , як ви кажете , робите CTRL + Z ) не пригнічує процес. Це зупиняє процес!
andcoz

5

Процес, який запускається з терміналу, має stdin, stdout та stderr, пов'язані з терміналом, і ви нічого не можете з цим зробити, не отримавши знову контроль над цим терміналом ... Зазвичай. Але є кілька складних інструментів, які насправді дозволяють вам це робити. Погляньте на цей приклад . І інші програми на зразок rettyзгаданих там.


3

Я не погоджуюся з andcoz, що надто пізно замовчувати вихід.

Якщо припустити, що процес працює на передньому плані, використовуйте Ctrl-Zдля призупинення процесу. У цьому випадку буде повідомлено номер завдання та ідентифікатор процесу. Ви можете піти вперед і перемістити процес на задній план, використовуючи bg %1(для роботи №1). Хоча це переміщує процес на другий план, воно не замовчує вихід. Щоб заглушити вихід, ви можете використовувати gdbдля переадресації всього виводу на /dev/null.

Це було дуже добре описано раніше на /programming/593724/redirect-stderr-stdout-of-a-process-after-its-been-started-using-command-lin/593764#593764 .


0

Ще один інструмент командного рядка є detach. Остання версія підтримує написання pidfiles, використання файлів для stdin, stdout та stderr та запуску на передньому плані. (На веб-сайті detachтакож обговорюються подібні інструменти.)

http://inglorion.net/software/detach/

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