加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

linux – 检测后台操作

发布时间:2020-12-13 22:59:40 所属栏目:Linux 来源:网络整理
导读:在C中,在“后台模式”中调用检测程序的方法是什么? 我有一个程序,我想以交互方式或在后台启动. 如何检测我不应该从stdin读取并以“Stopped:tty input”状态结束? 我应该测试stdin是否关闭?我怎样才能做到这一点 ? 编辑: isatty似乎是一个好主意,但是如
在C中,在“后台模式”中调用检测程序的方法是什么?
我有一个程序,我想以交互方式或在后台启动.

如何检测我不应该从stdin读取并以“Stopped:tty input”状态结束?

我应该测试stdin是否关闭?我怎样才能做到这一点 ?

编辑:
isatty似乎是一个好主意,但是如果stdin是管道端,而不是tty会发生什么?

解决方法

在控制终端的文件描述符上使用 tcgetpgrp()函数(例如STDIN_FILENO或0表示stdin)来检查当前前台进程组是否等于您自己的进程组(从 getpgrp()开始).但是,当您的程序在前景和后台之间移动时,前台进程组可能随时更改.例如,在调用tcgetpgrp()之后和测试之前,它可能会立即更改.因此,如果您打算采取任何行动,请记住这一点;它不是避免SIGTTIN的可靠方法.

#include <unistd.h>
pid_t fg = tcgetpgrp(STDIN_FILENO);
if (fg == -1) {
    /* stdin is not controlling terminal (e.g. file,pipe,etc.) */
} else if (fg == getpgrp()) {
    /* foreground */
} else {
    /* background */
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读