在子进程调用execlp()后如何使用printf()函数?

3

我目前正在尝试在调用子进程中的execlp()后从子进程打印一条消息。然而,在调用execlp()后终端上没有任何内容显示。是什么导致我的printf()调用不显示任何内容,如何解决这个问题?

3个回答

6
在成功调用 execlp() 后,您之前程序中的任何代码都不会再运行。进程的内存空间将被新进程覆盖。
如果您仍然需要与子进程进行一些管理,则在调用 execlp() 之前,您需要调用 fork()。这将给您两个进程,并且您可以在两个进程之间进行通信。

谢谢。你对exec()函数覆盖当前内存空间的方法的解释以及绕过此问题的建议都是正确的。 - XBigTK13X

3
exec*()函数替换调用它们的进程为提供作为参数的可执行文件。
这意味着,如果execlp调用成功,那么发出调用的子进程将不再存在。因此,在execlp之后的任何printf语句只有在execlp调用失败时才能执行,这通常意味着请求的程序不存在。

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接