Форум программистов, компьютерный форум, киберфорум
Shell, Bash
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 Аватар для NnineBfive
1 / 1 / 1
Регистрация: 07.11.2018
Сообщений: 73

Открепить программу от терминала

10.02.2026, 17:43. Показов 456. Ответов 12

Студворк — интернет-сервис помощи студентам
Создаю скрипт, где в результате могу полуить название программы или путь к ней. Ее могу запустить следующим образом: "$program", гед program="/path/to/program_name". Но мне надо закрыть после этого терминал и чтобы программа не закрывалась.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
10.02.2026, 17:43
Ответы с готовыми решениями:

Открыть вторую и третью консоль из первого терминала. Закрыть первую и третью консоли из под второго терминала
Открыть вторую и третью консоль из первого терминала. Закрыть первую и третью консоли из под...

Как запустить GUI программу в Linux с правами суперпользователя без терминала
Доброго времени суток! Помогите пожалуйста решить такую проблему. Есть куча задач по...

Разобраться в командах терминала Linux
Извините если не в ту тему Нужно кое что сделать в терминале Линукса часть я уже сделал, но в...

12
 Аватар для Pphantom
2316 / 1560 / 720
Регистрация: 17.03.2022
Сообщений: 5,013
10.02.2026, 17:57
Лучший ответ Сообщение было отмечено Eddy_Em как решение

Решение

Проще говоря, вам надо запустить программу так, чтобы после закрытия терминала она осталась работать?
Bash
1
nohup запуск_программы &
1
 Аватар для volodin661
6791 / 2288 / 348
Регистрация: 10.12.2013
Сообщений: 7,897
10.02.2026, 18:00
ИИ: unix create daemon program
0
 Аватар для NnineBfive
1 / 1 / 1
Регистрация: 07.11.2018
Сообщений: 73
10.02.2026, 19:30  [ТС]
Pphantom, да, спасибо. я этот вариант рассматривал, но он не работал. я запускал скрипт в новом терминале и закрывал его при запуске программы, но программа не успевала открепляться. поэтому моим решением стало добавить еще sleep 0.5 после процесса открепления
0
 Аватар для peter_irich
367 / 223 / 53
Регистрация: 18.10.2017
Сообщений: 2,380
10.02.2026, 20:40
Как сделать программу демоном, описано в книге Робачевского "Операционная система UNIX", в конце 2-й главы. Для отсоединения от терминала надо создать дочерний процесс командой fork(), а родительский завершить.
0
 Аватар для Pphantom
2316 / 1560 / 720
Регистрация: 17.03.2022
Сообщений: 5,013
10.02.2026, 20:49
Цитата Сообщение от peter_irich Посмотреть сообщение
Как сделать программу демоном, описано в книге Робачевского "Операционная система UNIX", в конце 2-й главы.
Вопрос только в том, на кой ... демон. Это несколько более серьезное требование, чем просто сохранение процесса после прекращения родителя.
0
 Аватар для peter_irich
367 / 223 / 53
Регистрация: 18.10.2017
Сообщений: 2,380
10.02.2026, 21:07
Pphantom, да, конечно, просто параграф посвящён этому. Но для аккуратности стоит его посмотреть.
0
 Аватар для NnineBfive
1 / 1 / 1
Регистрация: 07.11.2018
Сообщений: 73
11.02.2026, 09:20  [ТС]
так, почему-то nohup у меня не открепляет процесс от родителся. вместо него я использую setsid
Bash
1
2
setsid bash -c "$program" >/dev/null 2>&1 &
sleep 0.2
я думал что демоны, это "свободные процессы", не предполагаю, что это что-то по сложнее
0
Windows must die
672 / 851 / 103
Регистрация: 23.11.2021
Сообщений: 5,020
Записей в блоге: 17
11.02.2026, 09:38
NnineBfive, nohup не может "не работать"! Могут "не работать" руки…
Зачем запускать какой-то бинарник в отдельной сессии баша? nohup уже является той самой прокладкой, которая игнорирует SIGHUP, и запускает нужный процесс. А амперсанд в конце строки говорит, что утилита запускается в фоне, т.е. баш не будет ждать окончания ее исполнения.

Добавлено через 2 минуты
А "демонизация" на С вот так делается, например:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
    signal(SIGINT, signals);
    signal(SIGQUIT, signals);
    signal(SIGABRT, signals);
    signal(SIGTERM, signals);
    signal(SIGHUP, SIG_IGN);
    signal(SIGTSTP, SIG_IGN);
    signal(SIGUSR1, signals); // restart server
...
#ifndef EBUG
    unsigned int pause = 5;
    while(1){
        childpid = fork();
        if(childpid){ // master
            double t0 = sl_dtime();
            LOGMSG("Created child with pid %d", childpid);
            wait(NULL);
            LOGERR("Child %d died", childpid);
            if(sl_dtime() - t0 < 1.) pause += 5;
            else pause = 1;
            if(pause > 900) pause = 900;
            sleep(pause); // wait a little before respawn
        }else{ // slave
            prctl(PR_SET_PDEATHSIG, SIGTERM); // send SIGTERM to child when parent dies
            break;
        }
    }
#endif
Демоны же, которые планируется через openrc или sysvinit запускать, не должны форкаться, т.к. в случае их смерти их перезапустит система инициализации. Я запускаю из rc-local, поэтому сам слежу, не помер ли процесс.
0
 Аватар для NnineBfive
1 / 1 / 1
Регистрация: 07.11.2018
Сообщений: 73
11.02.2026, 09:48  [ТС]
Eddy_Em, я использую ... bash -c ... потому что без него "$program" у меня не запустится, если в нем есть еще параметры запуска. А так я понял, что nohup у меня не работал из-за того что в конце у меня амперсанд.

Что посоветуете использовать nohup или setsid?
0
Windows must die
672 / 851 / 103
Регистрация: 23.11.2021
Сообщений: 5,020
Записей в блоге: 17
11.02.2026, 09:58
Цитата Сообщение от NnineBfive Посмотреть сообщение
без него "$program" у меня не запустится
Так "$program" - это, что ли, баш-скрипт без шебанга?
А почему бы ему, как положено, шебанг не приписать?
Цитата Сообщение от NnineBfive Посмотреть сообщение
nohup у меня не работал из-за того что в конце у меня амперсанд
Нет. Если nohup не запустил скрипт, то это значит, что в скрипте не было ШЕБАНГА!
0
 Аватар для NnineBfive
1 / 1 / 1
Регистрация: 07.11.2018
Сообщений: 73
11.02.2026, 10:32  [ТС]
Eddy_Em, нет, "$program" это или просто программа или путь к ней, еще может быть с параметрами запуска(браузер, терминал, файловый менеджер и т.п.).

и да, мне всетаки нужен & в конце, так как я данный скрипт запускаю в новом терминале (rio -e ./path/to/bash.sh), без него терминал остается открытым, будто ожидает завершения процесса, которого я открепил. но при этом nohup у меня не работает, приходится использовать setsid и еще после использовать sleep, так как похоже без задержки не успевает открепить процесс и они оба завершаются.
0
Windows must die
672 / 851 / 103
Регистрация: 23.11.2021
Сообщений: 5,020
Записей в блоге: 17
11.02.2026, 11:06
NnineBfive, пока не будет вменяемого примера (что за "программа"?), никаких советов дать не получится.
На том же stackoverflow всегда перво-наперво кричат вопрошающему: "where is MWE"?
Вот и в данном случае: где MWE?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
11.02.2026, 11:06
Помогаю со студенческими работами здесь

Выравнивание текста по правому краю терминала
Здравтсвуйте, я только начинаю работать с Unix/Linux системами, поэтому пока плохо умею писать...

Отключение истории ведения команд терминала
Как отключить историю ведения команд в терминале ?

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

С терминала вводится некоторое целое число
Пожалуйста сделайте! Очень надо! • вводит с терминала некоторое целое число; • всем...

Как подсчитать количество процессов, запущенных с терминала?
доброго времени суток. мне нужно подсчитать количество процессов запущенных с терминала. Я нашел...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru