嗨,我是linux环境的新手。我正在尝试创建守护进程。
#include<stdio.h>
int main()
{
int a=10,b=10,c;
c=sum(a,b);
printf("%d",c);
return (0);
}
int sum(int a,int b)
{
return a+b;
}
我想创建它的守护进程。我可以知道怎么做到这一点?任何帮助,将不胜感激。谢谢。
守护程序通常不使用其标准输入和输出流,因此不清楚程序如何作为守护程序运行。守护程序通常没有任何终端,所以它不能使用clrscr
。另请阅读tty demystified页面,以及daemon(7)。
我建议阅读Linux编程的一些很好的介绍,比如旧的可免费下载的ALP(或更新的东西)。我们无法在这里解释所有这些,你需要阅读整本书。另见intro(2)和syscalls(2)。
我还建议阅读有关操作系统的更多信息,例如免费提供的Operating Systems: Three Easy Pieces教科书。
您可以在C程序中使用daemon(3)函数将其作为守护程序运行(但是,您可能没有任何输入和输出)。您可能希望使用syslog(3)记录消息。
您可以考虑shell的job control设施。您可以在后台运行程序(例如,在交互式shell中键入myprog myarg &
)。您可以使用batch
命令。但是,后台进程和批处理作业都不是技术上的守护进程。
也许你想编写一些ONC-RPC或JSONRPC或Web API服务器和客户端。你会找到那个库。另见pipe(7),socket(7)
(需要几天或几周才能阅读更多内容)
首先找到daemon process
的属性,据我所知,守护进程具有以下属性:
not
应该有any parent
(它本身应该是父母)
过程本身就是一个session leader
。root
。mask
zero
。通过考虑上面的属性来实现代码
removed
或者你可以浏览un-mounted
的手册页
int i=0;
int main()
{
int pid;
pid=fork();
if(pid!=0) {
/** you can add your task here , whatever you want to run in background **/
exit(0);
}
else
{
setsid();//setting sessions
chdir("/");//root.. should'nt beunmounted
umask(0);
close(0);//all terminal are removed
close(1);
close(2);
while(1)
{
printf("i = %d \n",i);
i++;
}
}
return 0;
}
我希望它有所帮助。
我没有编写代码来使C程序成为守护进程,而是使用已经成熟的工具,如supervisor:
daemon()