程序是从命令行执行还是通过系统调用调用

Whether program is executed from command line or invoked through system call

平台是linux,c代码是用gcc编译的。

是否可以从程序代码内部知道其可执行文件是直接从命令行执行还是通过“system”调用调用? 例如 test.exe 可以在命令行上直接 运行 作为 ./test.exe 或通过 system("/home/mydir/test.exe") 执行 我如何知道 运行ning 程序内部是如何调用它的?

我相信通过从 int main(int argc, char *argv[]) 解析 argv[0] 就可以找到它。如果它包含 /,则从其路径调用,否则从命令行调用。

无法确定,因为在一天结束时您最终会执行 execve。您可以使用一些奇怪的启发式方法,例如检查父进程,但这都是废话。

真正的问题是你为什么要关心,或者:实际问题是什么?

如果 system() 消费者应该做一些不同的事情,让它传递一个特殊的参数或设置一个传递给该进程的特殊环境变量。