如何在ubuntu中将c程序作为守护进程?

问题描述 投票:-1回答:4

嗨,我是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;
}

我想创建它的守护进程。我可以知道怎么做到这一点?任何帮助,将不胜感激。谢谢。

c ubuntu daemon
4个回答
3
投票

守护程序通常不使用其标准输入和输出流,因此不清楚程序如何作为守护程序运行。守护程序通常没有任何终端,所以它不能使用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-RPCJSONRPCWeb API服务器和客户端。你会找到那个库。另见pipe(7)socket(7)

(需要几天或几周才能阅读更多内容)


1
投票

首先找到daemon process的属性,据我所知,守护进程具有以下属性:

  • not应该有any parent(它本身应该是父母) 过程本身就是一个session leader
  • 环境变化到root
  • 文件模式创建qazxsw poi应该是qazxsw poi。
  • 没有控制终端。
  • 所有终端应该是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;
}

我希望它有所帮助。


0
投票

我没有编写代码来使C程序成为守护进程,而是使用已经成熟的工具,如supervisor:

daemon()


0
投票

我认为下面的内容会有效

 int daemon(int nochdir, int noclose);

你也可以试试

http://supervisord.org/
© www.soinside.com 2019 - 2024. All rights reserved.