当前位置: 技术问答>linux和unix
如何判断程序是后台运行的?
来源: 互联网 发布时间:2016-10-13
本文导语: 程序如何判断自己是否在后台运行的? 我试了一下 ./prog 与 ./prog & argv[0]是一样的,还有其他办法检测程序自己是否被后台运行呢? | #include #include #include int main (int argc, char **argv) { FI...
程序如何判断自己是否在后台运行的?
我试了一下 ./prog 与 ./prog &
argv[0]是一样的,还有其他办法检测程序自己是否被后台运行呢?
我试了一下 ./prog 与 ./prog &
argv[0]是一样的,还有其他办法检测程序自己是否被后台运行呢?
|
#include
#include
#include
int main (int argc, char **argv)
{
FILE *fp;
char fmt[FILENAME_MAX] = {0};
char buf[BUFSIZ] = {0};
sprintf (fmt, "ps ef | grep %s | awk '{print $3}'", argv[0]);
fp = popen (fmt, "r");
while (fgets (buf, BUFSIZ, fp) != NULL) {
fgets (buf, BUFSIZ, fp);
if (!strrchr (buf, '+'))
printf ("Bg: %s", buf);
else
printf ("Fg: %s", buf);
}
pclose (fp);
}
自己验证一下./prog与./prog &等
|
可以使用控制终端/dev/tty
一个小例子
#include
#include
#include
#include
int back = 0;
void f1(int a) { back = 1; }
void f2(int a){};
main()
{
char a;
int fd;
signal(SIGTTIN, f1);
signal(SIGALRM, f2);
fd = open("/dev/tty", O_RDWR);
alarm(1);
read(fd, &a, 1);
alarm(0);
if( back == 1 ) printf("oo, backgroundn");
else printf("oo, foregroundn");
}
alarm是为了处理前台运行,没有输入时导致进程阻塞的问题