2012年3月30日 星期五

背景執行

http://linuxdiary.blogspot.com/2007/10/blog-post_30.html

nohup  xxxxxx & <-- 最後要加 & 代表打入背景


kevet@c-110:~/ConSurf$ nohup python2.6 1_parsepdb_557_consider_whole_chains_case_heavy_bu_normal.py 1BGA_A Y &
[1] 14576

kevet@c-110:~/ConSurf$ nohup: appending output to `nohup.out'
kevet@c-110:~/ConSurf$ ps -fC python2.6
UID        PID  PPID  C STIME TTY          TIME CMD
kevet    14576 14500 99 13:43 pts/0    00:09:14 python2.6 1_parsepdb_557_consider_whole_chains_case_heavy_bu_normal.py 1BGA_A Y


kevet@c-110:~/ConSurf$ top

top - 13:52:41 up 42 days, 11:16,  1 user,  load average: 0.99, 0.90, 0.53
Tasks: 108 total,   2 running, 106 sleeping,   0 stopped,   0 zombie
Cpu(s): 22.4% us,  2.6% sy,  0.0% ni, 74.9% id,  0.0% wa,  0.0% hi,  0.0% si
Mem:   8168684k total,  4400976k used,  3767708k free,       12k buffers
Swap: 16008732k total,     4748k used, 16003984k free,  3938400k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                                                       
14576 kevet     40   0  380m 269m 4056 R 99.9  3.4   9:28.52 python2.6                                                                                      
14642 kevet     40   0  9488 1192  904 R  0.3  0.0   0:00.01 top                                                                                            
    1 root      40   0  4880  560  520 S  0.0  0.0   0:16.17 init.orig   



nohup (no hang up,不要掛斷)。當使用者利用 ssh 等指令或軟體登入主機後,想要執行某個指令,但一旦登出或關掉 ssh 軟體,那個在背景執行的工作會跟著消失,主要原因是它的父行程被關閉了,也就是使用者剛剛關閉的 bash,那怎麼辦?nohup 可以為您強制保存背景工作,即便父行程被關閉,以下為示範
bang@linuxdiary:~$ nohup sleep 500 &
[1] 8544
bang@linuxdiary:~$ nohup: appending output to `nohup.out'

bang@linuxdiary:~$ ps -fC sleep (用 ps 查詢正在用 sleep 命令執行的行程)
UID PID PPID C STIME TTY TIME CMD
root 8544 8014 0 16:41 pts/1 00:00:00 sleep 500
此時關閉 shell,重新登入
bang@linuxdiary:~$ ps -fC sleep
UID PID PPID C STIME TTY TIME CMD
root 8544 1 0 16:42 pts/1 00:00:00 sleep 500

會發現它還存在著,但 PPID 變為 1,亦即父行程被指派為 init,這個背景工作不會再受父行程關閉而關閉影響,因為如果想關閉 init,那就關機吧。





screen -ls 顯示目前個人所有的 screen
screen -r 就是重新回到(resume)screen 裡 ex: % screen -r 1188 

kevet@c-120:~/dataset2$ screen rar_static a hssp.rar ./hssp &
[1] 6321

kevet@c-120:~/dataset2$ [screen is terminating]
 

kevet@c-120:~/dataset2$ man
What manual page do you want?
[1]+  Done                    screen rar_static a hssp.rar ./hssp




在啟動process時,在前面加上screen指令

screen S mm /usr/local/kaillerasrv-0.86/kaillerasrv &

-S 後面加的字是用來分辨那個 process用的,在範例中是叫做"mm",
到時要把畫面叫回來時會用到
最後面加的就是你要跑的process名稱
最後別忘了加個 "&", 讓它放到背景執行


當你要把畫面叫回來時
 
screen -r mm

這個 "mm" 就是之前定的名稱

沒有留言: