在C中,檢測程序的方式是在「後臺模式」中調用的? 我有一個程序,我想要以交互方式或在後臺啓動。檢測後臺操作
如何檢測我不應該從標準輸入讀取並以「Stopped:tty input」狀態結束?
我應該測試stdin是否關閉?我怎樣才能做到這一點 ?
編輯: isatty似乎是一個好主意,但是如果stdin是管道末端而不是tty,會發生什麼?
在C中,檢測程序的方式是在「後臺模式」中調用的? 我有一個程序,我想要以交互方式或在後臺啓動。檢測後臺操作
如何檢測我不應該從標準輸入讀取並以「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 */
}
1)你應該檢查標準輸入是否打開,並打開/ dev/null,如果它關閉。
2)可以使用isatty
其中「返回1,如果遞減是連接到終端和0打開文件描述符否則」