如何以便携方式创建流程?

时间:2009-11-09 21:19:03

标签: c windows linux createprocess

我正在尝试编写一个需要创建其他进程的程序。我已经习惯了Windows API,但现在我需要我的程序才能在Linux平台上运行。

是否可以以便携方式进行?我是否必须为此目的使用预处理器?

编辑:我需要等待它完成才能继续做。

4 个答案:

答案 0 :(得分:3)

在我看来,应该始终避免使用系统函数:它不可靠,因为你不知道shell将处理你的命令,而且它没有办法让你返回一个明确的错误代码。此外,在Windows等平台上,进程非常重要,启动新进程只是为了启动另一个进程并不是一个好主意,顺便说一下,某些安全套件可能会为您的应用尝试启动的每个进程发出警告,并且将此通知加倍(一个用于命令解释器,一个用于实际启动的应用程序)可能会使用户倍感烦恼。

如果您只需要创建一个新进程,您可以围绕实际的特定于平台的代码创建包装函数,该代码将在编译程序时自动选择,这要归功于预处理程序。像这样:

int CreateProcess(const char * Executable, const char * CommandLine)
{
#if defined (_WIN32)
    return CreateProcess(Executable, CommandLine /* blah blah blah */)!=FALSE;
#elif defined (_POSIX)
    /* put here all the usual fork+exec stuff */
#else
    #error The CreateProcess function is not defined for the current platform.
#endif
}

顺便说一句,该函数可以很容易地扩展为阻塞,你可以简单地添加一个标志(int Blocking,或者现在在C99中用于布尔值的任何东西),它将触发win32部分和waitpid的WaitForSingleObject。对于POSIX部分。

答案 1 :(得分:1)

API是不同的,因此无法编写两段代码或链接到执行相同操作的库。

Apache Portable Runtime是用C语言编写可移植低级程序的好选择。

答案 2 :(得分:0)

尝试在Posix和Windows上都存在的system()。

@Jeff - system()是一个阻塞调用,在子进程退出之前不会返回。

答案 3 :(得分:0)

您需要对其他线程有多少控制权?如果只是启动它们很简单,那么system()函数可能是一个很好的选择。如果你想要更多地控制它们,我会查看一个库。我知道Qt使得进行多进程编程的某些方面变得相当容易。