后台,其實指的是當前登陸終端的后台。在終端執行后台命令,如果在命令尚未執行完畢時就關閉終端,那么這個后台命令還會繼續執行嗎?當然不會,因為關閉終端時系統發送一個SIGHUP信號。即使不退出終端,在終端中執行ctrl + C,會發送一個SIGINT信號,進程也會退出。
nohup的意思是忽略SIGHUP信號, 所以當運行nohup a的時候, 關閉shell, 那么進程a還是存在的(對SIGHUP信號免疫)。 注意, 如果你直接在shell中用Ctrl C, 那么, a進程也是會消失的(因為對SIGINT信號不免疫)。&對SIGINT信號免疫,所以a &運行進程a,直接在shell中Ctrl C,a進程也不會退出。
所以最好的方法是:nohup a &,此時無論在shell中Ctrl C或者是關閉shell,a進程都不會退出。