linux中程序在前台运行和后台运行有什么区别
你所谓的“后台进程”应该叫做 守护进程(daemon),init就是特殊的守护进程,PID为1。
Linux启动时vmlinux内核加载initrd.img(ram disk)作为根文件系统并开始执行其中的init来加载各种模块、服务。常见的Linux服务也都是守护进程,比如管理系统日志的rsyslogd,数据库服务mysqld等等。
你也可以把一个运行在shell里的进程转到后台运行,比如把sar系统监控数据采集放到后台运行:
nohup sar -u 2 >>sar.log 2>&1 &
加入到/etc/rc.local,还可以开机自启动:
nohup sar -u 2 >>/var/log/sar.log 2>&1 &
nohup的用途就是让提交的命令忽略sighup信号(一个kill信号,编号为1),Terminal关闭时就发送了这个信号给sar。
结尾加上"&"将命令同时放入后台运行,如果不使用nohup仅用&,Terminal关闭时sar进程也会退出。
2>&1 表示错误重定向到标准输出,2表示stderr,1表示stdout。
其中日志归档可以使用logrotate(logrotate是一个/etc/cron.daily/任务,由cron守护进程定时执行)