知道进程是否被 exec() 调用
Know if process has been called by exec()
有什么方法可以知道进程是从调用 exec() 开始 运行 还是由用户从终端启动?
对您有帮助:child and parent process id;
getppid() returns 调用的父进程 ID
过程。这将是创建此进程的 ID
使用 fork() 的进程,或者,(!!!CARE!!!) 如果该进程已经终止,则
此进程已重新设置为父进程的进程 ID;
我也会考虑添加额外的程序参数。
所有程序都是通过调用 exec
系列函数启动的。
例如,当您在终端中键入命令时,它会搜索二进制可执行文件 fork
s 并在子进程中调用 exec
。这会将调用进程(终端)的二进制映像替换为新程序的二进制映像。程序将执行,终端进程将 wait
。
paxdiablo on the question Please explain exec() function and its family 的这个绝对很棒的答案肯定会帮助您了解 exec
的工作原理。
在 Unix 中,所有进程都是使用 fork
系统调用创建的,之后可以选择使用 exec
系统调用,即使是那些由用户启动的进程(它们是 fork/exec' d 由用户的shell)。
根据你真正想做的事情,库函数 isatty() 会告诉你 stdin
、stdout
或 stderr
是否是 tty 设备的文件描述符.即输入来自终端,输出进入终端或错误进入终端。但是,像
这样的命令
myprog < somefile 1>someotherfile 2>errorfile
将使用 isatty
来欺骗代码。但也许这就是你想要的。如果您想根据用户是从键盘输入还是从文件输入来采取不同的操作,isatty
就是您所需要的。
有什么方法可以知道进程是从调用 exec() 开始 运行 还是由用户从终端启动?
对您有帮助:child and parent process id;
getppid() returns 调用的父进程 ID 过程。这将是创建此进程的 ID 使用 fork() 的进程,或者,(!!!CARE!!!) 如果该进程已经终止,则 此进程已重新设置为父进程的进程 ID;
我也会考虑添加额外的程序参数。
所有程序都是通过调用 exec
系列函数启动的。
例如,当您在终端中键入命令时,它会搜索二进制可执行文件 fork
s 并在子进程中调用 exec
。这会将调用进程(终端)的二进制映像替换为新程序的二进制映像。程序将执行,终端进程将 wait
。
paxdiablo on the question Please explain exec() function and its family 的这个绝对很棒的答案肯定会帮助您了解 exec
的工作原理。
在 Unix 中,所有进程都是使用 fork
系统调用创建的,之后可以选择使用 exec
系统调用,即使是那些由用户启动的进程(它们是 fork/exec' d 由用户的shell)。
根据你真正想做的事情,库函数 isatty() 会告诉你 stdin
、stdout
或 stderr
是否是 tty 设备的文件描述符.即输入来自终端,输出进入终端或错误进入终端。但是,像
myprog < somefile 1>someotherfile 2>errorfile
将使用 isatty
来欺骗代码。但也许这就是你想要的。如果您想根据用户是从键盘输入还是从文件输入来采取不同的操作,isatty
就是您所需要的。