1. 程式人生 > >別把 和nohup混為一談 根本不是同一個東西好不好 聊聊 /a out nohut /a o

別把 和nohup混為一談 根本不是同一個東西好不好 聊聊 /a out nohut /a o

               

       在第一家公司工作的時候, 我認識了&,在第二家公司工作的時候, 我認識了nohup,  這就是淵源。  隨後, 我就一直糊塗用他們, 但並不懂這兩個東西。 網上很多地方是亂扯, 瞎複製, 為什麼不自己實踐一下呢?

       看個小程式:

#include <stdio.h>#include <unistd.h>int main ()int x = 0while(1) {  printf("hello %d, pid %u, ppid %d\n", x++, getpid(), getppid());  sleep(1); }  return 0
;}
       生成可執行程式a.out,  下面, 我會在我的linux機器上進行測試!!!

       &的意思是在後臺執行, 什麼意思呢?  意思是說, 當你在執行 ./a.out & 的時候, 即使你用ctrl C,  那麼a.out照樣執行(因為對SIGINT訊號免疫)。 但是要注意, 如果你直接關掉shell後, 那麼, a.out程序同樣消失。 可見, &的後臺並不硬(因為對SIGHUP訊號不免疫)。

      nohup的意思是忽略SIGHUP訊號, 所以當執行nohup ./a.out的時候, 關閉shell, 那麼a.out程序還是存在的(對SIGHUP訊號免疫)。 但是, 要注意, 如果你直接在shell中用Ctrl C, 那麼, a.out程序也是會消失的(因為對SIGINT訊號不免疫)

      所以, &和nohup沒有半毛錢的關係, 要讓程序真正不受shell中Ctrl C和shell關閉的影響, 那該怎麼辦呢? 那就用nohua ./a.out &吧, 兩全其美。

       如果你懂守護程序, 那麼nohup ./a.out &頗有點讓a.out成為守護程序的感覺。