我在我的過程中有一個方法,只有當過程不在後臺時才應該運行。 如何動態測試當前進程是否在後臺? 謝謝C/C++過程如何知道它是否在後臺運行?
2
A
回答
2
退房Unix的常見問題的源代碼:How can a process detect if it's running in the background?
一般的回答是:如果你在後臺運行,則不能告訴。
但你可以檢查標準輸入是一個終端:if(isatty(0)) { ... }
0
請嘗試查詢DISPLAY的可用性。有顯示XSET命令 How to check if Linux console screensaver has blanked screen
+0
-1。這與在後臺運行某些東西有什麼關係? DISPLAY變量是一個X事物,與過程控制無關。 – 2010-10-15 08:58:36
4
以下是我使用,從作業控制一個shell啓動的程序(大部分外殼,見下文):
/* We can read from stdin if :
* - we are in foreground
* - stdin is a pipe end
*/
static int validate_stdin(void) {
pid_t fg = tcgetpgrp(STDIN_FILENO);
int rc = 0;
if(fg == -1) {
debug_printf("Piped\n");
} else if (fg == getpgrp()) {
debug_printf("foreground\n");
} else {
debug_printf("background\n");
rc = -1;
}
return rc;
}
如果一個會話有一個控制終端,前臺只能有進程組,而tcget/setpgrp用於設置該進程組ID。因此,如果您的進程組標識不是前臺進程組的進程組標識,那麼您不在前臺。
如果shell具有作業控制,就像mouviciel指出的鏈接所說的那樣。 但是,情況並非總是如此。例如,在使用busybox的嵌入式系統上,可以使用或不使用作業控制來配置shell。
0
相關問題
- 1. 如何知道正在運行的後臺進程是否爲
- 2. 我如何知道我的Android應用程序是否在後臺運行?
- 3. 函數能否知道它是否在協程中運行?
- 4. 如何知道哪些應用程序在後臺運行
- 5. 如何知道任務是否在後臺執行
- 6. shell函數如何知道它是否在virtualenv中運行?
- 7. Python線程 - 如何知道線程是否已在運行?
- 8. 如何知道tomcat是否在Apache後面運行?
- 9. 如何知道jQuery是否在後臺運行動畫以及如何阻止它們?
- 10. 如何知道該應用是否從後臺進程調用
- 11. 如何知道過程是否繁忙
- 12. 如何知道我的應用程序在後臺或前臺運行?
- 13. 如何知道某個進程是否正在運行?
- 14. 顯示通知應用程序是否正在運行或在後臺運行
- 15. 如何知道線程是否還活着然後殺死它?
- 16. 我如何知道在後臺運行的AsyncTask已完成?
- 17. 如何在後臺運行Python子進程管道然後殺掉它
- 18. 線程是否可運行?或上課?如何在後臺運行線程?
- 19. 知道AsyncTask是否正在運行
- 20. 如何識別應用程序是否在後臺運行
- 21. android:如何檢查應用程序是否在後臺運行
- 22. 我如何知道應用程序在Android中在後臺運行多久?
- 23. 更改訂閱時,如何知道CC是否處於分段?
- 24. 如何知道應用程序是否在前臺?
- 25. R可以知道它是否在Windows上運行?
- 26. BB10級聯C++,如何知道應用程序在後臺運行?
- 27. 如何知道在android的後臺運行了多少應用程序?
- 28. 如何知道在後臺運行的進程的退出代碼
- 29. 如何讓php知道它運行在iOS還是MacOS上
- 30. 應用程序如何知道它正在Google AppEngine上運行?
當你說「背景」時,你的意思是在* nix過程意義上,還是在GUI意義上? – 2010-10-15 08:23:27
你對標題的措辭對我沒有意義。 C和C++是編程語言,而不是unix進程的屬性。 – 2010-10-15 09:02:49