在前臺運行某個命令,終端被該作業(yè)占據(jù),而在后臺運行作業(yè)時,不會占據(jù)終端。下面將介紹幾種在前臺與后臺之間切換的方法。

前臺轉入后臺

第一種,在要運行的命令后面加上&,命令自動轉入后臺運行,不占用前臺終端。例如運行一個不斷打印字符串到標準輸出的可執(zhí)行程序,輸入如下:
$ vi test.c
#include <stdio.h>
main()
{
   while(1)
      print("ok \n");
}
$ gcc -o test test.c
$ ./test &
此時test程序將轉入后臺繼續(xù)執(zhí)行,并在標準輸出即控制臺上打印出字符。停止該程序的方法是利用ps命令找到該程序的對應進程號num,然后運行kill num。注意:在控制臺中不斷出現(xiàn)的打印字符會淹沒輸入的命令,但是沒有任何影響,命令依然可以被正確解析。

第二種,運行./test后,使用ctrl+z使正在運行的命令./test暫停(ctrl+c是終止),用命令jobs查看想要轉入后臺的命令編號n,然后運行bg n即可。注意,該命令的最終作用等價于將./test命令后面加上&符號。

第三種,使用nohup+命令的運行方式,在缺省情況下該命令的所有輸出都被重定向到一個名為nohup.out的文件中,除非有指定的重定向文件。例如:
nohup command &
nohup command >result 2>&1 &
而且使用nohup轉入后臺的命令,在關閉shell后重新登錄,該命令依然處于運行狀態(tài),但通過ps命令不會顯示,而是使用ps x或者ps –A命令方可顯示。
注意:如果是執(zhí)行腳本并重定向輸出的話,不應該在腳本內部寫,而是寫成:
nohup ./***.sh >result 2>&1 &

以上三種方法的特點是:第一、二種方法在退出該shell進程后命令均不存在。第三種方法即使退出shell進程后,命令依然存在,而命令的控制權交給了init。

后臺轉入前臺

使用jobs命令查看要轉入前臺的命令編號n,然后運行fg n即可。fg命令即"front ground"。