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

时间:2017-12-17 09:03:38

标签: c ubuntu daemon

您好我是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;
}

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

4 个答案:

答案 0 :(得分: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 :(得分:1)

首先找到public class CustomView: UIView { @IBOutlet weak var nameLabel: UILabel! @IBOutlet weak var valueLabel: UILabel! public convenience init() { self.init(frame: CGRect.zero) } public override convenience init(frame: CGRect) { self.init(internal: nil) self.frame = frame } public required init?(coder aDecoder: NSCoder) { super.init(coder: aDecoder) commonInit() } fileprivate func commonInit() { } } fileprivate protocol _CustomView { } extension CustomView: _CustomView { } fileprivate extension _CustomView { // Protocol extension initializer - has the ability to assign to self, unlike // class initializers. Note that the name of this initializer can be anything // you like, here we've called it init(internal:) init(internal: Int?) { self = Bundle.main.loadNibNamed("CustomView", owner:nil, options:nil)![0] as! Self; } } 的属性,据我所知,守护进程具有以下属性:

  • 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; }

的手册页
daemon()

我希望它有所帮助。

答案 2 :(得分:0)

不是编写代码使C程序成为守护进程,而是使用已经成熟的工具,如主管:

http://supervisord.org/

答案 3 :(得分:0)

我认为以下内容可行

screen cmd arg1 arg2

您也可以尝试

nohup cmd arg1