1

我在 Linux 上用 C++ 编写我的应用程序。C++ 有一个称为“系统”的函数来执行程序。

我尝试像这样从 C++ 打开 gnome-system-monitor:

system("gnome-system-monitor");

但是,当我调用这个“系统”函数时,我的应用程序的线程会阻塞,直到我关闭 gnome-system-monitor 的窗口。

还有其他方法可以在不阻塞调用者进程的情况下从文件打开进程吗?

4

4 回答 4

2

适用于任何 Linux 或其他基于 POSIX 的系统的经典方法是

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

(此示例中省略了错误处理。)这(a)创建一个新进程,(b)在该新进程中,在搜索 PATH 环境变量以找到这样的命令后运行“gnome-system-monitor”,(c)将名称“gnome-system-monitor”作为 argv[0] 传递给它,并且没有其他参数。在父进程中,一旦创建了新进程,它就会继续前进,而无需等待任何结果。

有关详细信息fork,请参见手册页。execlp

于 2012-10-12T06:10:30.310 回答
1

fork/exec 或 posix_spawn。如果您正在使用 glib,glib 也有 GSpawn。

于 2012-10-12T06:03:39.970 回答
1

Gnome 构建在 GTk(包含 Glib)之上,您可能需要Glib Spawning Processes函数。

当然,在 Linux 和 Unix 上,进程分叉的。阅读一本好书,例如 高级 unix 编程高级 linux 编程,以了解有关与进程相关的系统调用的更多信息,尤其是fork(2)execve(2)pipe(2)。另请阅读有关proc(5)文件系统的信息。

于 2012-10-12T06:06:37.753 回答
0

是的。在单独的线程上调用系统函数。

于 2012-10-12T06:05:38.100 回答