Возможно ли из программы Linux на C или C++ (скажем, /usr/bin/foo
) программно запустить другую программу (скажем, /usr/bin/bar
) и нормально завершить foo
, а bar
продолжить работу?
system(3)
не подходит, так как блокируется до завершения другой программы. Я хотел бы что-то, что возвращается немедленно.
Обе программы являются программами с графическим интерфейсом, но я подозреваю, что это не имеет значения.
Есть ли что-нибудь в Qt или boost::process, что может помочь?
Есть ли какая-нибудь обычная программа-оболочка Linux, которую я мог бы запустить через system(3)
для достижения этой цели? Я пробовал xdg-open
, но не думаю, что это правильно.
По сути, я хочу, чтобы вторая программа отделялась от первой и вела себя так, как если бы пользователь запускал ее через системный пользовательский интерфейс. (Например, в MacOS есть команда open
, поэтому она будет похожа на system("open /usr/bin/bar")
)
fork()
иexecv()
- это то, как это обычно делается. Кроме того, вы можетеsystem()
с&
в конце, чтобы работать в фоновом режиме, но это противно. - person SergeyA   schedule 02.12.2020boost::process
, вы можете взглянуть наboost::process::spawn
или классboost::process::child
, который позволяет настроить и создать дочерний процесс перед отсоединив его. - person G.M.   schedule 02.12.2020QProcess::start
, который делает это. - person rustyx   schedule 02.12.2020QProcess::start
, продолжает работать? - person Andrew Tomazos   schedule 02.12.2020QProcess::startDetached
выглядит правильно. - person Andrew Tomazos   schedule 02.12.2020