Я хочу, чтобы я мог включить процесс внутри подоболочки, как если бы он не был внутри подоболочки.
$( sleep 3 & )
просто игнорирует амперсанд.
Я пробовал:
$( sleep 3 & )
$( sleep 3 & ) &
$( sleep 3 ) &
но ничего не меняется.
Затем я попытался $( disown sleep 3 & )
, что вернуло
disown: не удается манипулировать заданиями в подоболочке
, который заставил меня попробовать $( set -m; disown sleep 3 & )
, но я получил тот же вывод.
Я даже пытался создать программу на С ++, которая могла бы демонизировать себя:
#include <unistd.h>
#include <chrono>
#include <thread>
using namespace std;
int main() {
int ret = fork();
if (ret < 0) return ret; // fork error
if (ret > 0) return 0; // parent exits
this_thread::sleep_for(chrono::milliseconds(3000));
return 0;
}
Но после запуска,Я понял, что поскольку я fork
вместо separate_from_parent_and_let_parent_die
использую подоболочку, она все еще будет ждать завершения процесса.
Чтобы выйти из моего MCVE, функция вызывается из подоболочки, и вэта функция, мне нужно получить данные с сервера, и он должен быть запущен в BG.Единственное мое ограничение - я не могу отредактировать вызов функции в подоболочке.
Есть ли способ не разветвляться, а отделяться от родительского процесса в программе на c ++, чтобы он мог умереть без последствий или принудительно вызватьКоманду отделить от подоболочки в bash?
Желательно последняя.