關於linux下的程序運行很簡單,將源碼編譯成二進制(假設為proram)文件后直接在命令行運行即可,
root#./program
如果需要后台運行,即不占用當前終端,這在嵌入式linux顯得十分有必要,因為一般嵌入式linux只有一個終端,通過rs232連接到電腦上,使用SercureCRT或者其他軟件來與linux交互,如果當前終端被程序占用,那么就不能進行其他操作(此處不考慮可以通過網絡訪問方式,例如Telnet),讓程序后台運行即可,加上符號&:
root#./program &
這種方式可行,但是還有一種方式更好,在代碼中實現可以后台運行。
代碼實現方式如下:
void daemonize(void) { signal(SIGTTOU, SIG_IGN); signal(SIGTTIN, SIG_IGN); signal(SIGTSTP, SIG_IGN); if (0 != fork()) exit(0); if (-1 == setsid()) exit(0); signal(SIGHUP, SIG_IGN); if (0 != fork()) exit(0); if (0 != chdir("/")) exit(0); } int main(int argc, char *argv[]) { int o; while(-1 != (o = getopt(argc, argv, "hD"))) { switch(o) { case 'D': daemonize(); break; default: show_help(); return -1; } } do_something(); }
這樣生成的二進制文件(如program)只要在命令行加入參數 D即可后台運行:
root#./program -D
如果不加參數D,那么就占用當前終端,daemonize()這段代碼是我直接借用開源項目lighttpd(開源Web服務器軟件),並且在自己的相關開發程序中使用。
關於daemonize()這段代碼的分析,提供一個網上的介紹鏈接
https://blog.csdn.net/jiange_zh/article/details/50483099
詳解介紹截圖如下: