rc.local在是系统启动后就执行,也就是说你没有登陆前就执行了
rc.local脚本只是一个在各运行级别里到rc.d目录的rc.local脚本的软链接而已,编号最大,所以被rc脚本执行时在各运行级别的初始化末尾进行。
在rc.local里设置的最好是系统级别而非用户级别的,因为启动脚本的初始化与用户无关(启动脚本初始化完成后,才进入用户登录界面)。与用户相关的最好设置shell的配置文件如~/.bash_profile。
常见问题及解决方法:
问题:我程序手动运行正常,收发数据正常,加载图标也可以显示
但是我让程序自动运行,即电脑一开启就自动运行起来,图标加载不了(没显示),收不到数据了(同过ping可以知道网络是通的),程序自动运行是写进/etc/rc.local里,/程序路径名/./应用程序名称。
解决:
把程序改成用守护进程在后台运行
函数如下(直接在程序中应用该函数就可以实现程序后台运行):
/*
* 初始化守护进程
*/
void init_daemon(void)
{
pid_t pid;
int i;
if (pid = fork())
exit(0); /* 是父进程,结束父进程 */
else if (pid < 0)
exit(1); /* fork失败 */
setsid(); /* 第一个子进程成为新的会话组和进程组组长 */
/* 并且与控制终端脱离 */
if (pid = fork())
exit(0); /* 是第一个子进程,结束第一个子进程 */
else if (pid < 0)
exit(1); /* fork失败 */
/* 孙子进程不再是会话组长 */
for (i = 0; i < NOFILE; ++i)
close(i); /* 关闭打开的文件描述符 */
chdir("/root"); /* 改变工作目录到/root */
umask(0); /* 重设文件创建掩模 */
return;
}