知道exec()是否调用了进程

时间:2018-01-16 09:44:09

标签: c fork exec

有没有办法知道某个流程是否已从 exec()的调用开始运行,或者是否已由用户从终端启动?

3 个答案:

答案 0 :(得分:1)

对您有帮助:child and parent process id;

getppid()返回调用父级的进程ID        处理。这将是创建此进程的进程的ID        如果该进程已经终止,则使用fork(),或(!!! CARE !!!)进程        该流程已重新定义的流程的ID;

我还会考虑添加额外的程序arg。

答案 1 :(得分:1)

所有程序都是通过调用exec系列函数启动的。

例如,当您在终端中键入命令时,它会在子进程中搜索二进制可执行文件fork并调用exec。这将代替调用进程(终端)的二进制映像替换新程序的二进制映像。程序将执行,终端进程将wait

问题paxdiabloPlease explain exec() function and its family提供了这个非常棒的答案,肯定会帮助您了解exec的工作原理。

答案 2 :(得分:1)

在Unix中,所有进程都是使用fork系统调用创建的,可选地后跟exec系统调用,甚至是那些由用户启动的进程(它们是fork / exec'用户的shell)。

根据您真正想要做的事情,库函数isatty()会告诉您stdinstdoutstderr是否是tty设备的文件描述符。即输入来自终端,输出发送到终端或错误发送到终端。但是,像

这样的命令
 myprog < somefile 1>someotherfile 2>errorfile

将使用isatty欺骗代码。但也许这就是你想要的。如果您想根据用户是否从键盘输入输入或输入来自文件而采取不同的操作,isatty就是您所需要的。