加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

nohup, &作用

发布时间:2020-12-15 19:28:04 所属栏目:安全 来源:网络整理
导读:最近看了58沈剑的文章"一分钟了解nohup和的功效","明明打印到文件了,为啥tail -f看不到",对常用的nohup和的了解更多了一些,结合这两篇文章,做些记录和总结。 nohup, nohup作用: 1.忽略SIGHUP信号,可以响应SIGINT信号 2.忽略输入 3.输出重定向,默认重定

最近看了58沈剑的文章"一分钟了解nohup和&的功效","明明打印到文件了,为啥tail -f看不到",对常用的nohup和&的了解更多了一些,结合这两篇文章,做些记录和总结。

nohup,&

nohup作用:
1.忽略SIGHUP信号,可以响应SIGINT信号
2.忽略输入
3.输出重定向,默认重定向到当前目录下nohup.out文件。

&作用
1.脱离前台运行,转入后台运行
2.忽略SIGINT信号,可以响应SIGHUP信号
3.输出默认到屏幕

信号:
Ctrl+C会发送SIGINT信号;
关掉SESSION会话会发送SIGHUP信号

常规用法:
nohup command & 1>>outputfile 2>>errorfile
或:
nohup command & 1>>outputfile 2>&1

printf缓冲区

另外,说下输出到文件,但是tail -f没有内容的问题。
本质上,是printf的缓冲区问题。
模仿实现同样的功能,shell脚本代码(demo.sh)如下:

#/bin/bash
i=0;
while true
do
    let i+=1;
    echo "hello,"$i;
    sleep 1;
done;

执行shell脚本:
nohup bash demo.sh
tail -f nohup.out
只要脚本执行一次,无论是否kill掉进程,会发现输出已经在默认的nohup.out文件了。

同样功能的C代码,kill掉进程,在nohup.out文件中没有输出内容。
结论:和nohup,&都没有关系,和C语言的printf函数有关系。
printf是缓冲IO操作,缓冲IO为了效率,并不是每次输出都写入内核缓冲区的,而是写入用户态缓冲区,等满足条件(缓冲区满,输出包含有r或n字符,手动刷新缓冲fflush)才写入内核缓冲区。
进入内核缓冲区后,有两种方式把缓冲写入磁盘:
1.定时进程写入磁盘;
2.通过sync或者fsync命令手动刷新写入磁盘。

看来,C语言的printf有很多知识点。

Refer:
printf缓冲区总结
https://blog.csdn.net/skyflyi...
https://blog.csdn.net/k346k34...

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读