Откройте процесс из файла в C ++ в Linux

Я пишу свое приложение на C ++ в Linux. В C ++ есть функция system для выполнения программы.

Я пытаюсь открыть gnome-system-monitor из C ++ следующим образом:

system("gnome-system-monitor");

Тем не менее, поток моего приложения блокируется, когда я вызываю эту «системную» функцию, пока я не закрою окно gnome-system-monitor.

Любые другие способы открыть процесс из файла, не блокируя процесс вызывающего?

1

Решение

Классический способ, который работает в любой системе Linux или POSIX, это

if (0 == fork()) {
execlp("gnome-system-monitor", "gnome-system-monitor", (char *)NULL);
}

(с обработкой ошибок, опущенной в этом примере.) Это (a) создает новый процесс, (b) в этом новом процессе, запускает «gnome-system-monitor» после поиска переменной среды PATH, чтобы найти такую ​​команду, (c) передает ему имя «gnome-system-monitor» как argv [0] и никаких других аргументов. В родительском объекте, когда новый процесс создан, он движется вперед, не ожидая какого-либо результата.

Смотрите справочные страницы для fork а также execlp Больше подробностей.

2

Другие решения

fork / exec или posix_spawn. У glib также есть GSpawn, если вы используете это.

1

Gnome построен над GTk (который содержит Glib), и вы, вероятно, хотите Glib Нерестовые процессы функции.

Конечно, в Linux и Unix, процессы являются раздвоенный. Прочитайте хорошую книгу, как
расширенное программирование Unix а также расширенное программирование в Linux узнать больше о Системные вызовы связанные с процессами, в частности, вилка (2), execve (2), трубы (2). Читайте также о Proc (5) файловая система.

1

Да. Вызов функции системы в отдельном потоке.

0
По вопросам рекламы [email protected]