如何判断一个非deamon进程是否为后台执行
只在KSH上面测试过,APUE 里面介绍过Bsh对于job control支持得不太好,因此这个程序只对对ksh和csh是有效滴。原来实现了一个利用标准输入输出来判断的,如果程序重定向可能会有问题。这次索性利用terminal文件描述符。
实现原理:
判断当前session的terminal对应的process group同当前进程的process group是否相等。相等则表明当前进程属于foreground process group,正在前端运行,否则表示后台执行。
#include "stdio.h"
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
int hasTerminal()
{
int termfd = open("/dev/tty", O_RDONLY);
if (termfd < 0)
{
return 0;
}
else
{
if (isatty(termfd) && (tcgetpgrp(termfd) == getpgrp()))
{
close(termfd);
return 1;
}
else
{
close(termfd);
return 0;
}
}
return 0;
}
int main()
{
if (hasTerminal())
printf("has terminal\n");
else
printf("hasn't terminal\n");
return 0;
}