Есть ли способ создать постоянно работающий фоновый процесс, которым я (обычный пользователь, не являющийся пользователем root) могу управлять?
Все, что мне нужно, это иметь возможность запускать, останавливать и перезапускать процесс. Мониторинг по PID и отправка SIGHUP или SIGINT для завершения — это нормально. Я согласен использовать сложный скрипт bash, он не должен быть чем-то системным. Только для меня.
Мне также очень нужно, чтобы он не останавливался, когда я выхожу из SSH.
Есть ли способ сделать это в RHEL 6.4?
решение1
экран или tmux
Конечно, вы можете запускать процессы и затем запускать их непрерывно, используя терминальный мультиплексор, такой как screen или tmux. Процессы могут продолжать существовать в сеансе screen или tmux, и вы можете подключаться/отключаться от любого из них (screen или tmux) по мере необходимости.
фонирование
Вы можете запустить любой процесс, перевести его в фоновый режим и отключить от текущего терминала с помощью команды disown
.
$ disown -a
Кроме того, если вы просто хотите запустить процесс и не переводить его в фоновый режим, disown
вы можете использовать команду nohup
.
$ nohup myexec &
При выходе из оболочки myexec
она продолжит работу.
Пример
Запустить фальшивый процесс.
$ sleep 12345 &
[1] 24339
$
Убедитесь, что мы это видим:
$ pgrep -f "sleep 12345"
24339
Но он все еще подключен к нашему терминалу:
$ jobs
[1]+ Running sleep 12345 &
Итак, начнем disown
:
$ disown -a
$ jobs
$
Смотрите, он все еще работает:
$ pgrep -f "sleep 12345"
24339
Теперь давайте выйдем из системы и войдем снова. Видите, он все еще там:
$ pgrep -f "sleep 12345"
24339
Вы можете завершить этот процесс в любое время стандартными средствами:
$ pkill -HUP -f "sleep 12345"
$ pgrep -f "sleep 12345"
$
Вышеуказанный код отправит сигнал HUP
процессу с именем, соответствующим шаблону "sleep 12345". Двойная проверка показывает, что теперь он исчез.