`sudo $operationPath >&/dev/null &`,为什么要封标准输出呢?
1.在linux中,输出人机接口有2种,标准输出STDOUT,标准错误STDERROR,前者可以反映正确执行后的结果,后者可以反映错误执行后的结果。这样做没啥不好,但问题是如果是一个比较大的程序,或者输出结果比较多,用户不想用,难道还要眼睁睁看错误信息玩刷屏么?所以Unix系的设计者搞了输出重定向/dev/null,把本来写STDOUT和STDERROR
文件的信息拿去写/dev/null文件去了。
具体语法就是:
1>/dev/null 2>/dev/null
1就是STDOUT 2就是STDERROR
也可以这么写:
>&/dev/null
或者
&>/dev/null
如果仅仅想看STDERROR,不想看STDOUT
1>/dev/null
或
>/dev/null
不想看STDERROR
2>/dev/null
2.啥是后台?
后台是和前台相对应的,个人理解,就用户和机器的关系来说,人机接口即是前台,用户用来和机器的
程序接口即是前台。将一个程序转为后台运行,即程序不再占用前端的接口,用户可以继续做其它操作,使用其它程序。
对于CLI来说,一个直观的后台运行程序,就是敲完一圈命令,一按回车,直接敲下一个命令。
但对于GUI来说,程序后台运行的直接表现是,点完按钮,立马出个alert提示操作完毕,然后你可以做其它操作。
● Bug分析
CLI和GUI的两种后台表现本身是不冲突的,但是两者连起来,就需要进行协调。
一个脚本用&转后台时,虽然不往STDOUT输出信息,但还是要往外输出一个PID
所以对一个脚本来说,&后台运行是好用的。但是如果脚本再调用脚本,被调用的脚本
做后台操作,如果不封掉输出( >&/dev/null),则调用脚本还需要等待被调用脚本的输出,
因此就造成了实质上的排队,仍然是在做前台运行。
● 总结
在脚本调用执行后台操作时一定要谨慎,为了保险起见,如果脚本之间不用传递输出参数,
最好在后台调用时使用 >&/dev/null &`进行控制。