nohup, &作用

最近看了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...

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值