Запуск процесса linux фоне

Команда nohup в Linux

В Linux команда nohup (HangUP) поддерживает работу процессов даже после выхода из оболочки или терминала.

Примеры использования команды nohup в Linux

Команда предотвращает получение процессами или заданиями сигнала SIGHUP, который отправляется процессу при закрытии или выходе из терминала.

Синтаксис

Ввод и вывод

Если стандартный ввод является терминалом, то он берётся из нечитаемого файла.

Если стандартный вывод является терминалом, то вывод добавляется в nohup.out , при наличии возможности, в противном случае — сюда:

Если стандартный поток ошибок является терминалом, то он перенаправляется в стандартный вывод. Запись вывода в ФАЙЛ осуществляется так:

Использование команды nohup в Linux

Проверка версии утилиты

Для проверки версии утилиты используется следующий синтаксис:

oleg@mobile:~:$ nohup --v nohup (GNU coreutils) 9.1 Copyright (C) 2022 Free Software Foundation, Inc. Лицензия GPLv3+: GNU GPL версии 3 или новее. Это свободное ПО: вы можете изменять и распространять его. Нет НИКАКИХ ГАРАНТИЙ в пределах действующего законодательства. Автор программы — Jim Meyering. oleg@mobile:~:$

Запуск процесса

Для того чтобы процессы/задания выполнялись в оболочке и не были бы уничтожены при выходе из неё команда выполняется так:

oleg@mobile:~:$ nohup ~/Directory/convert.sh nohup: ввод игнорируется, вывод добавляется в 'nohup.out' oleg@mobile:~:$ 

В скрипт я внёс ошибку. Вывод команды был сохранен в nohup.out :

oleg@mobile:~:$ cat nohup.out mkdir: невозможно создать каталог «thumbnails»: Файл существует convert: unable to open image '*.jpg': Нет такого файла или каталога @ error/blob.c/OpenBlob/3569. convert: no images defined `thumbnails/*.jpg.png' @ error/convert.c/ConvertImageCommand/3342. oleg@mobile:~:$ 

Вывод можно также перенаправить в другой файл:

oleg@mobile:~:$ nohup ~/Directory/convert.sh > output.txt nohup: ввод игнорируется и поток ошибок перенаправляется на стандартный вывод oleg@mobile:~:$ cat output.txt mkdir: невозможно создать каталог «thumbnails»: Файл существует convert: unable to open image '*.jpg': Нет такого файла или каталога @ error/blob.c/OpenBlob/3569. convert: no images defined `thumbnails/*.jpg.png' @ error/convert.c/ConvertImageCommand/3342. oleg@mobile:~:$ 

Можно перенаправить в файл и стандартную ошибку и вывод с использованием атрибута 2>&1 :

oleg@mobile:~:$ nohup ~/Directory/convert.sh > output.txt 2>&1 oleg@mobile:~:$ cat output.txt nohup: ввод игнорируется mkdir: невозможно создать каталог «thumbnails»: Файл существует convert: unable to open image '*.jpg': Нет такого файла или каталога @ error/blob.c/OpenBlob/3569. convert: no images defined `thumbnails/*.jpg.png' @ error/convert.c/ConvertImageCommand/3342. oleg@mobile:~:$ 

Запуск процесса в фоновом режим

Для запуска процесса в фоновом режиме в конце команды добавляется символ & . Для примера пингуем linuxcookbook.ru и отправляем его в фоновый режим:

oleg@mobile:~:$ nohup ping linuxcookbook.ru & [1] 122843 oleg@mobile:~:$ nohup: ввод игнорируется, вывод добавляется в 'nohup.out' oleg@mobile:~:$ cat nohup.out PING linuxcookbook.ru (139.162.132.20) 56(84) bytes of data. 64 bytes from li1398-20.members.linode.com (139.162.132.20): icmp_seq=1 ttl=52 time=43.5 ms 64 bytes from li1398-20.members.linode.com (139.162.132.20): icmp_seq=2 ttl=52 time=41.2 ms 64 bytes from li1398-20.members.linode.com (139.162.132.20): icmp_seq=3 ttl=52 time=37.3 ms 64 bytes from li1398-20.members.linode.com (139.162.132.20): icmp_seq=4 ttl=52 time=40.2 ms 64 bytes from li1398-20.members.linode.com (139.162.132.20): icmp_seq=5 ttl=52 time=36.5 ms 64 bytes from li1398-20.members.linode.com (139.162.132.20): icmp_seq=6 ttl=52 time=39.1 ms 64 bytes from li1398-20.members.linode.com (139.162.132.20): icmp_seq=7 ttl=52 time=39.5 ms 64 bytes from li1398-20.members.linode.com (139.162.132.20): icmp_seq=8 ttl=52 time=38.7 ms 64 bytes from li1398-20.members.linode.com (139.162.132.20): icmp_seq=9 ttl=52 time=41.1 ms . oleg@mobile:~:$

Для проверки работы процесса в фоне применяется команда pgrep с опцией -a :

oleg@mobile:~:$ pgrep -a ping 122843 ping linuxcookbook.ru oleg@mobile:~:$ 

Остановка запущенного процесса

Для остановки запущенного процесса используется команда kill , за которой следует идентификатор (ID) процесса:

oleg@mobile:~:$ kill 122843 oleg@mobile:~:$ 

Выводы

Из приведённых примеров использования в Linux команды nphup следует:

  • все процессы, запущенные с помощью этой команды, будут игнорировать сигнал SIGHUP даже после выхода из оболочки;
  • как только задание запущено или выполнено, стандартный ввод будет недоступен для пользователя;
  • файл nohup.out используется по умолчанию для stdout и stderr .
Читайте также:  Linux прочитать последние строки файла

Источник

Send a Process to Background Linux

When working with graphical desktop environments, we rarely worry about background processes. If we have a process running in the foreground, we can quickly spawn another terminal window and continue with our work.

However, if you are in a raw terminal shell such as SSH, you will often feel concerned about processes that occupy and block the shell until they are completed, especially on long-running jobs. That is where the concept of background and foreground processes comes into play.

This tutorial will discuss what background and foreground processes are, including creating and managing them in Linux.

What is a Process?

Allow me to start at the basic level: what is a process?

In Linux, a process is an instance of a program. Typically, this means any command or executable in a shell is a process.

There are mainly two types of processes:

Foreground processes are mainly typical applications that we launch and interact with them. An example would be the nautilus file manager in Gnome. In most cases, we can start foreground processes from the shell or the desktop environment.

On the other hand, background processes run in the background and require no input or interaction from the user. An example would be any typical Linux daemon.

How to Run a Process in the Background

Suppose we have a process that, while running, occupies the shell session and hinders us from executing commands until it exits.

For example, if we run the Firefox browser in the shell, it will occupy the session until process termination.

Читайте также:  Linux command and example

As you can see, as long as Firefox is running, the shell prompt is unavailable, and we cannot execute any more commands.

To solve this, we can do it two ways:

1: Using an Ampersand (&)

The first method is using the ampersand & sign. This tells the shell to run whatever command precedes the ampersand in the background.

In such a scenario, the process executes in the background and spawns as a new shell prompt allowing us to continue executing commands.

It also gives two numerical identifiers. The first one enclosed in square brackets is the Job ID, while the next one is the process ID.

2: Using CTRL + Z, bg command.

The next method you can use to put a process in the background is to use the shortcut CTRL + Z. This stops the process from blocking the shell. You can then use the bg command to push it to the background.

For example, start by launching Firefox as:

While the process is running, press CTRL + Z. This returns your shell prompt. Finally, enter the bg command to push the process in the background.

How to Show Background Processes

To view and manage processes in the background, use the jobs command in the shell. That will show the background jobs in the current terminal session.

An example output of background jobs:

To bring a process running in the background to the foreground, use the fg command followed by the job id.

For example, to bring the firefox job in the foreground, we use the command:

To put in the background again, press CTRL + Z followed by the bg command.

How to Make a Process Persistent After Shell Dies

When you are running processes in the background, and your shell session dies, all the processes associated with it terminate, which can be problematic, especially if it is an SSH session.

However, this is not too big an issue if you use a terminal multiplexer such as tmux or screen because, in that case, you can simply reattach the session.

However, if you run a shell session without a multiplexer, you can use the nohup command.

The nohup command is immune to hang-ups and can ignore the SIGHUP signal sent to a process.

Hence, if you run a command with nohup, it continues to run even if the shell session accidentally dies.

For example, to run Firefox with nohup, use the command:

This will run the process in the background as persist a shell terminate.

Читайте также:  Индекс программного обеспечения поврежден linux mint

You can run a new terminal session and view the background jobs. You will see the process still running in the background.

Conclusion

In this tutorial, we discussed various ways to run and send processes to the background in Linux. We also covered how to bring a background process to the background and persist hang-up upon shell termination.

About the author

John Otieno

My name is John and am a fellow geek like you. I am passionate about all things computers from Hardware, Operating systems to Programming. My dream is to share my knowledge with the world and help out fellow geeks. Follow my content by subscribing to LinuxHint mailing list

Источник

Команды Linux: как работает nohup

При выходе из оболочки системы Linux все запущенные процессы обычно завершаются или зависают. Но что делать, если вы хотите, чтобы процессы работали даже при выходе из оболочки/терминала? В этом вам поможет команда nohup.

Nohup — это сокращение от no hangup. Эта команда поддерживает в системах Linux работу процессов даже после выхода из оболочки или терминала. Она предотвращает получение процессами или заданиями сигнала SIGHUP ( Signal Hang UP ). Это сигнал, который отправляется процессу при закрытии или выходе из терминала. В этом руководстве мы рассмотрим команду nohup и покажем, как ее можно использовать.

Синтаксис команды nohup

Синтаксис команды выглядит следующим образом:

Давайте же посмотрим, как работает данная команда.

Проверка версии nohup

Вы можете начать с проверки версии Nohup, используя приведенный ниже синтаксис.

Запуск процесса с помощью Nohup

Если вы хотите, чтобы ваши процессы/задания работали даже после закрытия терминала, укажите необходимую команду в nohup, как показано ниже. Задания будут по-прежнему выполняться и не будут уничтожены при выходе из оболочки или терминала.

Согласно приведенному выше выводу результат команды был сохранен в nohup.out. Чтобы убедиться в этом, запустите:

Кроме того, вы можете перенаправить вывод в другой файл, как показано ниже.

Чтобы просмотреть этот файл, введите:

Чтобы перенаправить в файл и стандартную ошибку, и вывод, используйте атрибут > filename 2>&1 , как показано ниже.

nohup ./hello.sh > myoutput.txt >2&1

Запуск процесса в фоновом режиме

Чтобы запустить процесс в фоновом режиме, используйте символ & в конце команды. В этом примере мы пингуем google.com и отправляем этот процесс в фоновый режим.

Чтобы проверить процесс при возобновлении работы оболочки, используйте команду pgrep, как показано ниже.

Если вы хотите остановить или убить запущенный процесс, используйте команду kill, за которой укажите идентификатор процесса, как показано ниже.

Заключение

Все процессы, запущенные с помощью команды nohup, будут игнорировать сигнал SIGHUP даже после выхода из оболочки.

Как только задание запущено с помощью команды nohup, стандартный ввод будет недоступен для пользователя.

По умолчанию nohup.out используется как стандартный файл для stdout и stderr.

Источник

Оцените статью
Adblock
detector