有没有办法知道某个流程是否已从 exec()的调用开始运行,或者是否已由用户从终端启动?
答案 0 :(得分:1)
对您有帮助:child and parent process id;
getppid()返回调用父级的进程ID 处理。这将是创建此进程的进程的ID 如果该进程已经终止,则使用fork(),或(!!! CARE !!!)进程 该流程已重新定义的流程的ID;
我还会考虑添加额外的程序arg。
答案 1 :(得分:1)
所有程序都是通过调用exec
系列函数启动的。
例如,当您在终端中键入命令时,它会在子进程中搜索二进制可执行文件fork
并调用exec
。这将代替调用进程(终端)的二进制映像替换新程序的二进制映像。程序将执行,终端进程将wait
。
问题paxdiablo上Please explain exec() function and its family提供了这个非常棒的答案,肯定会帮助您了解exec
的工作原理。
答案 2 :(得分:1)
在Unix中,所有进程都是使用fork
系统调用创建的,可选地后跟exec
系统调用,甚至是那些由用户启动的进程(它们是fork / exec'用户的shell)。
根据您真正想要做的事情,库函数isatty()会告诉您stdin
,stdout
或stderr
是否是tty设备的文件描述符。即输入来自终端,输出发送到终端或错误发送到终端。但是,像
myprog < somefile 1>someotherfile 2>errorfile
将使用isatty
欺骗代码。但也许这就是你想要的。如果您想根据用户是否从键盘输入输入或输入来自文件而采取不同的操作,isatty
就是您所需要的。