在 Linux 上以C++从文件打开进程

Open a process from file, in C++ on Linux

本文关键字:进程 文件 Linux 上以 C++      更新时间:2023-10-16

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

我尝试从这样的C++打开侏儒系统监视器:

system("gnome-system-monitor");

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

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

适用于任何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

fork

/exec 或 posix_spawn. glib 如果你使用它,也有 GSpawn。

> Gnome 构建在 GTk(包含 Glib)之上,你可能想要 Glib 生成进程函数。

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

是的。在分离线程上调用系统函数。