主题说明了一切:运行在linux下的程序需要知道它是如何启动的。怎么做?
谢谢!
--皮特

最佳答案

当在命令行运行时,通常至少有一个标准文件描述符是一个终端,即使不是,通常也存在一个控制终端。这在从cron运行时通常不是真的。

if (isatty(STDIN_FILENO) || isatty(STDOUT_FILENO) || isatty(STDERR_FILENO))
     puts("One of my standard file descriptors is a terminal");

int fd = open("/dev/tty", O_RDWR);
if (fd != -1) {
    puts("I have a controlling terminal");
    close(fd);
}

还有其他的区别,比如环境等等,但是这些都不可靠。(即使是那些getppid解决方案也不一定有效-cron可能在sh中开始您的工作。)

10-06 14:31