debug时阅读nohup.out发现一个有趣的现象。程序主干是这样的:每个循环fork一次,子进程直接exit,父进程输出一行东西(exp i),然后进入下次循环。
我最开始以为输出会是这样的:
exp1
exp2
exp3
......
这也是正常后台运行(只加&)的输出。
而实际上却是这样的:
exp1 //p1
exp1 //p2
exp2
exp1 //p3
exp2
exp3
exp1 //p4
exp2
exp3
exp4
......
分析形式我觉得,Nohup指令触发多个进程重定向到nohup.out时,每个进程的标准输出是从最古老的父进程开始到该子进程exit这段时间的全部输出,而非fork执行后到exit的输出。这种解释和该情景相吻合。