Щоб команда продовжувалася після закриття вікна програми Terminal, вам потрібно зробити наступне.
- Попередьте команду за допомогою
nohup
. Це дозволить команді продовжуватися після закриття вікна програми Terminal. Це також дозволяє команді продовжуватись після завершення роботи програми Terminal.
- Перенаправлення стандартної та стандартної помилки на ті самі чи різні файли. Це дає висновок кудись піти, інакше буде використовуватись за замовчуванням. (Дивіться сторінку людини нижче).
- Додайте а
&
до кінця командного рядка. Це запускає команду у фоновому режимі, інакше ви не отримаєте командний рядок, поки команда не закінчиться.
Наприклад, якби я хотів використовувати 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