如何判断程序是后台运行的?

lwluser 2010-11-03 01:57:20
程序如何判断自己是否在后台运行的?
我试了一下 ./prog 与 ./prog &

argv[0]是一样的,还有其他办法检测程序自己是否被后台运行呢?
...全文
375 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
gettext 2010-11-04
  • 打赏
  • 举报
回复
前台后台只是对shell而言, 所以除了shell进程本身, 其他进程包括操作系统都无法得知, 所以ps看TTY也判断不出。
justkk 2010-11-04
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 mymtom 的回复:]
标准输入有可能被重定向了呢!

引用 5 楼 justkk 的回复:

后台运行的程序不能读取标准输入
是不是可以借助于这一点来判断?
[/Quote]
可以使用控制终端/dev/tty

一个小例子
#include <stdio.h>
#include <signal.h>
#include <fcntl.h>
#include <unistd.h>

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, background\n");
else printf("oo, foreground\n");
}


alarm是为了处理前台运行,没有输入时导致进程阻塞的问题
mymtom 2010-11-04
  • 打赏
  • 举报
回复
标准输入有可能被重定向了呢!
[Quote=引用 5 楼 justkk 的回复:]

后台运行的程序不能读取标准输入
是不是可以借助于这一点来判断?
[/Quote]
xiaocai0001 2010-11-04
  • 打赏
  • 举报
回复
如果应用程序需要有不同的逻辑, 应该通过命令行参数或者其它环境变量, 配置信息等来确定..

foreground/background这样的信息本身就是动态的..

在Shell中, 前台运行的程序也可以Ctrl+Z然后bg放到后台运行去, 这样的job还可以重新拿到前台运行(fg)
leafsoar 2010-11-04
  • 打赏
  • 举报
回复
弱弱问句,什么叫后台运行,标准是什么
如果都定义不好,怎么判断
Applic 2010-11-04
  • 打赏
  • 举报
回复

#include <stdio.h>
#include <string.h>
#include <unistd.h>

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 &等
steptodream 2010-11-03
  • 打赏
  • 举报
回复
ps后TTY那列没有终端的肯定是在后台运行

不过也有有终端的在后台运行的 不好判断呀
justkk 2010-11-03
  • 打赏
  • 举报
回复
后台运行的程序不能读取标准输入
是不是可以借助于这一点来判断?
freetstar 2010-11-03
  • 打赏
  • 举报
回复
或者用shell判断参数,把可执行文件放到shell里执行,看看参数多少
freetstar 2010-11-03
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 louyong0571 的回复:]

貌似是没什么好办法
[/Quote]
+1
louyong0571 2010-11-03
  • 打赏
  • 举报
回复
貌似是没什么好办法
yui 2010-11-03
  • 打赏
  • 举报
回复
我觉得,让prog自己检测自己是否后台执行,是没有办法的

因为是shell解释&这个符号,使prog后台运行

23,223

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧