gpt4 book ai didi

c - 你如何在 C 中生成另一个进程?

转载 作者:太空狗 更新时间:2023-10-29 16:23:39 25 4
gpt4 key购买 nike

如何使用 C 运行外部程序并向其传递命令行参数?如果您必须使用操作系统 API,请包括适用于 Windows、Mac 和 Linux 的解决方案。

最佳答案

这真的取决于你想做什么,确切地说,是这样的:

  1. 取决于操作系统
  2. 不太清楚您要做什么。

尽管如此,我还是会尝试提供一些信息供您决定。
在 UNIX 上,fork() 从调用 fork 的地方创建进程的克隆。意思是,如果我有以下过程:

#include <unistd.h>
#include <stdio.h>

int main()
{
printf( "hi 2 u\n" );
int mypid = fork();

if( 0 == mypid )
printf( "lol child\n" );
else
printf( "lol parent\n" );

return( 0 );
}

输出如下所示:

hi 2 u
lol child
lol parent

当您fork() 时,子进程返回的pid 为0,而父进程返回的pid 是子进程的pid。请注意,“hi2u”仅由 parent 打印一次。

execve() 及其函数族几乎总是与 fork() 一起使用。 execve() 等会覆盖当前的堆栈框架与您传递给它的应用程序的名称。 execve() 几乎总是与 fork() 一起使用,您可以在其中 fork 一个子进程,如果您是父进程,则可以做任何需要继续做的事情,如果您重新执行一个新进程的 child 。 execve() 也几乎总是与 waitpid() 一起使用——waitpid 获取子进程的 pid 并且,从字面上看,等待直到 child 终止并将 child 的退出状态返回给您。

使用这些信息,您应该能够编写一个非常基本的 shell;一个在命令行上获取进程名称并运行您告诉它的进程。当然,shell 的功能远不止于此,例如管道输入和输出,但您应该能够使用 fork()execve() 完成基础操作waitpid().

注意:这是 *nix 特定的!这不适用于 Windows。

希望这对您有所帮助。

关于c - 你如何在 C 中生成另一个进程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17140/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com