Якщо я вийду з Terminal.app, чи не завершать процес, який він ініціював, вийти з нього?


6

Якщо я використовую термінал для ініціювання трудомісткого процесу (у цьому випадку, видалення великого .sparsebundle-файлу з моєї капсули часу, що може зайняти години), і якщо я потім закриваю сам додаток Terminal до завершення цього процесу, чи це триває процес (видалення) також вийшов? Або Terminal просто виступає "тригером", і процес запускається автономно незалежно від того, чи Terminal.app активний чи ні?


1
Той факт, що він підкаже вам перед тим, як закрити запущене вікно терміналу, здається, що це трапляється у Terminal.app
Harcker

Відповіді:


6

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

  1. Попередьте команду за допомогою nohup. Це дозволить команді продовжуватися після закриття вікна програми Terminal. Це також дозволяє команді продовжуватись після завершення роботи програми Terminal.
  2. Перенаправлення стандартної та стандартної помилки на ті самі чи різні файли. Це дає висновок кудись піти, інакше буде використовуватись за замовчуванням. (Дивіться сторінку людини нижче).
  3. Додайте а &до кінця командного рядка. Це запускає команду у фоновому режимі, інакше ви не отримаєте командний рядок, поки команда не закінчиться.

Наприклад, якби я хотів використовувати findкоманду для пошуку файлу readgptта друку результатів у вікні програми Terminal, я би виконав команду, подану нижче. Примітка. Тут мене не цікавлять повідомлення про помилки, тому я перенаправляю стандартну помилку на /dev/null.

find / -name readgpt -print 2>/dev/null

Тепер, якби я хотів закрити вікно програми Terminal і переглянути результати пізніше, я би виконав команду нижче.

nohup find / -name readgpt -print >~/Documents/results.txt 2>/dev/null &

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

[1] 1456

Ви можете отримати статус цього процесу, ввівши psкоманду, як показано нижче.

Marlin:~ davidanderson$ ps 1456
  PID   TT  STAT      TIME COMMAND
 1456 s001  U      0:06.83 find / -name readgpt -print

Ви можете припинити цей процес, ввівши killкоманду, як показано нижче.

Marlin:~ davidanderson$ kill 1456
[1]+  Terminated: 15          nohup find / -name readgpt -print > ~/Documents/results.txt 2> /dev/null

Примітка: Якщо ви введете killкоманду у вікно, яке відрізняється від одного, яке використовується для створення процесу, то, ймовірно, не буде результату.

Сторінка man для nohupкоманди наведена нижче.

NOHUP(1)                  BSD General Commands Manual                 NOHUP(1)

NAME
     nohup -- invoke a utility immune to hangups

SYNOPSIS
     nohup [--] utility [arguments]

DESCRIPTION
     The nohup utility invokes utility with its arguments and at this
     time sets the signal SIGHUP to be ignored.  If the standard output
     is a terminal, the standard output is appended to the file nohup.out
     in the current directory.  If standard error is a terminal, it is
     directed to the same place as the standard output.

     Some shells may provide a builtin nohup command which is similar or
     identical to this utility.  Consult the builtin(1) manual page.

ENVIRONMENT
     The following variables are utilized by nohup:

     HOME  If the output file nohup.out cannot be created in the current
           directory, the nohup utility uses the directory named by HOME
           to create the file.

     PATH  Used to locate the requested utility if the name contains no
           `/' characters.

EXIT STATUS
     The nohup utility exits with one of the following values:

     126     The utility was found, but could not be invoked.

     127     The utility could not be found or an error occurred in
             nohup.

     Otherwise, the exit status of nohup will be that of utility.

SEE ALSO
     builtin(1), csh(1), signal(3)

STANDARDS
     The nohup utility is expected to be IEEE Std 1003.2 (``POSIX.2'')
     compatible.

BUGS
     Two or more instances of nohup can append to the same file, which
     makes for a confusing output.

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