在 Linux 上以C++从文件打开进程
Open a process from file, in C++ on Linux
我正在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) 文件系统的信息。
是的。在分离线程上调用系统函数。
相关文章:
- c++多进程编写一个唯一的文件
- 避免使用 boost::进程间::消息队列创建文件
- 从根权限进程创建可访问的文件
- Windows 将标准的 C 文件结构注入到正在运行的进程中
- gcc 找不到 -lgcc, g++.exe: 错误: 创建进程: 没有这样的文件或目录
- 是否可以将子进程的 stdout 重定向到父进程中的另一个文件?
- 如何在 Linux 下使用 c++ 知道文件是否被其他进程使用?
- 多个线程/进程是否可以在不同步的情况下同时从/写入文件的非重叠区域?
- 如何检测哪些进程更改,重命名或创建文件?
- 如何:监视Windows中另一个进程的文件访问?
- 提升进程间共享内存删除、权限和输出文件
- 使用文件锁定的进程之间的条件变量
- 当多个进程尝试同时替换同一文件时,Linux 如何处理这种情况?
- COM 客户端连接 COM 服务器所需的文件是什么(进程外方案)
- 如何在我的进程中运行的二进制文件中注册操作和内核
- 为什么我的 Redhat 服务器上的 QuickFIX 进程没有将其核心文件写入应有的位置?
- Growing Boost.使用单个写入器的进程间内存映射文件
- C++ Mingw32 创建进程() 失败,错误代码 2:系统找不到指定的文件
- 文件末尾的 C++ 进程文件空行
- 如何通知其他进程文件已标记为删除