导航:首页 > 编程系统 > linuxdeamon信号

linuxdeamon信号

发布时间:2021-02-25 20:32:18

linux下怎么以daemon方式运行

docker run指定的来命令如果不是源那些一直挂起的命令(比如运行top,不断echo),就是会自动退出的。-d命令是设置detach为true,根据官方的文档,意思是让这个命令在后台运行,但并不是一直运行(我们在一个正常的Linux Terminal中运行/bin/bash,运行完了也就完了,不会一直挂着等待响应的,所以确实没办法用daemon方式来跑/bin/bash)。 这个地方官方早期和现在的文档也确实有些前后不一致,现在是detach,早期的文档说指定-d以daemon方式来运行容器,可能存在一定的误解。 另外,如果你需要跑容器里的bash,直接运行docker run -i -t CONTAINER_NAME /bin/bash 就可以了,如果觉得参数比docker attach多,可以设置一个别名(alias)来解决: alias dockerbash='docker run -i -t CONTAINER_ID /bin/bash' 设置好别名后,直接运行dockerbash就可以进入容器的bash了

⑵ linux daemon中print问题

printf是带缓冲的IO库函数,为了提高性能会攒够一定量或者满足某条件无法继续等才内会输出,想要立刻看容到输出可以在printf之后调用一下fflush(NULL);
write是系统调用,不带缓冲,所以直接出来了。

⑶ linux下daemon占用CPU资源很高,怎么解决

你这个是网页服务器么,运行了 php-cgi。

⑷ 如何编写Linux Daemon后台程序

守护进程(Daemon)是运行在后台的一种特殊进程。它独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。守护进程是一种很有用的进 程。Linux的大多数服务器就是用守护进程实现的。比如,Internet服务器inetd,Web服务器httpd等。同时,守护进程完成许多系统任 务。比如,作业规划进程crond,打印进程lpd等。
守护进程的编程本身并不复杂,复杂的是各种版本的Unix的实现机制不尽相同,造成不同Unix环境下守护进程的编程规则并不一致。这需要读者注意,照搬 某些书上的规则(特别是BSD4.3和低版本的System V)到Linux会出现错误的。下面将全面介绍Linux下守护进程的编程要点并给出详细实例。
一. 守护进程及其特性
守护进程最重要的特性是后台运行。在这一点上DOS下的常驻内存程序TSR与之相似。其次,守护进程必须与其运行前的环境隔离开来。这些环境包括未关闭的 文件描述符,控制终端,会话和进程组,工作目录以及文件创建掩模等。这些环境通常是守护进程从执行它的父进程(特别是shell)中继承下来的。最后,守 护进程的启动方式有其特殊之处。它可以在Linux系统启动时从启动脚本/etc/rc.d中启动,可以由作业规划进程crond启动,还可以由用户终端 (通常是shell)执行。
总之,除开这些特殊性以外,守护进程与普通进程基本上没有什么区别。因此,编写守护进程实际上是把一个普通进程按照上述的守护进程的特性改造成为守护进程。如果读者对进程有比较深入的认识就更容易理解和编程了。
二. 守护进程的编程要点
前面讲过,不同Unix环境下守护进程的编程规则并不一致。所幸的是守护进程的编程原则其实都一样,区别在于具体的实现细节不同。这个原则就是要满足守护 进程的特性。同时,Linux是基于Syetem V的SVR4并遵循Posix标准,实现起来与BSD4相比更方便。编程要点如下;
1. 在后台运行。
为避免挂起控制终端将Daemon放入后台执行。方法是在进程中调用fork使父进程终止,让Daemon在子进程中后台执行。
if(pid=fork())
exit(0);//是父进程,结束父进程,子进程继续
2. 脱离控制终端,登录会话和进程组
有必要先介绍一下Linux中的进程与控制终端,登录会话和进程组之间的关系:进程属于一个进程组,进程组号(GID)就是进程组长的进程号(PID)。登录会话可以包含多个进程组。这些进程组共享一个控制终端。这个控制终端通常是创建进程的登录终端。
控制终端,登录会话和进程组通常是从父进程继承下来的。我们的目的就是要摆脱它们,使之不受它们的影响。方法是在第1点的基础上,调用setsid()使进程成为会话组长:
setsid();
说明:当进程是会话组长时setsid()调用失败。但第一点已经保证进程不是会话组长。setsid()调用成功后,进程成为新的会话组长和新的进程组长,并与原来的登录会话和进程组脱离。由于会话过程对控制终端的独占性,进程同时与控制终端脱离。
3. 禁止进程重新打开控制终端
现在,进程已经成为无终端的会话组长。但它可以重新申请打开一个控制终端。可以通过使进程不再成为会话组长来禁止进程重新打开控制终端:
if(pid=fork())
exit(0);//结束第一子进程,第二子进程继续(第二子进程不再是会话组长)
4. 关闭打开的文件描述符
进程从创建它的父进程那里继承了打开的文件描述符。如不关闭,将会浪费系统资源,造成进程所在的文件系统无法卸下以及引起无法预料的错误。按如下方法关闭它们:
for(i=0;i 关闭打开的文件描述符close(i);>
for(i=0;i< NOFILE;++i)
5. 改变当前工作目录
进程活动时,其工作目录所在的文件系统不能卸下。一般需要将工作目录改变到根目录。对于需要转储核心,写运行日志的进程将工作目录改变到特定目录如/tmpchdir("/")
6. 重设文件创建掩模
进程从创建它的父进程那里继承了文件创建掩模。它可能修改守护进程所创建的文件的存取位。为防止这一点,将文件创建掩模清除:umask(0);
7. 处理SIGCHLD信号
处理SIGCHLD信号并不是必须的。但对于某些进程,特别是服务器进程往往在请求到来时生成子进程处理请求。如果父进程不等待子进程结束,子进程将成为 僵尸进程(zombie)从而占用系统资源。如果父进程等待子进程结束,将增加父进程的负担,影响服务器进程的并发性能。在Linux下可以简单地将 SIGCHLD信号的操作设为SIG_IGN。
signal(SIGCHLD,SIG_IGN);
这样,内核在子进程结束时不会产生僵尸进程。这一点与BSD4不同,BSD4下必须显式等待子进程结束才能释放僵尸进程。
三. 守护进程实例
守护进程实例包括两部分:主程序test.c和初始化程序init.c。主程序每隔一分钟向/tmp目录中的日志test.log报告运行状态。初始化程序中的init_daemon函数负责生成守护进程。读者可以利用init_daemon函数生成自己的守护进程。
1. init.c清单
#include < unistd.h >
#include < signal.h >
#include < sys/param.h >
#include < sys/types.h >
#include < sys/stat.h >
void init_daemon(void)
{
int 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("/tmp");//改变工作目录到/tmp
umask(0);//重设文件创建掩模
return;
}
2. test.c清单
#include < stdio.h >
#include < time.h >
void init_daemon(void);//守护进程初始化函数
main()
{
FILE *fp;
time_t t;
init_daemon();//初始化为Daemon
while(1)//每隔一分钟向test.log报告运行状态
{
sleep(60);//睡眠一分钟
if((fp=fopen("test.log","a")) >=0)
{
t=time(0);
fprintf(fp,"I'm here at %sn",asctime(localtime(&t)) );
fclose(fp);
}
}
}
以上程序在RedHat Linux6.0下编译通过。步骤如下:
编译:gcc –g –o test init.c test.c
执行:./test
查看进程:ps –ef
从输出可以发现test守护进程的各种特性满足上面的要求。

⑸ redhat linux 有daemon命令吗

没有,daemon 是来自 /etc/init.d/functions 的一个函数 请在你的脚本中加入 . /etc/init.d/functions

⑹ linux里daemon是什么意思

daemon(发音为DEE-muhn),是一段连续运行的程序,用于处理计算机系统希望接收到的阶段性的服务需求。Daemon程序段将请求提交给其他合适的程序(或者进程)。

网络上每个页面的服务器都有一个HTTPS或者是超文本传输协议daemon,持续地等待从网络客户端及其用户发送来的请求。

Daemon程序,又称为守护进程,通常在系统后台长时间运行,由于没有控制终端而无法与前台交互,Daemon程序一般作为系统服务使用。

服务可以说是某一进程,而进程是需要程序去运行产生,也就是说程序运行提供某种服务,这些程序就称为daemon。似乎还是有点绕口,简单地说,daemon是静态的,就是某一程序,daemon运行后会提供某种服务,服务是动态的,是程序运行产生的进程。

但通常情况下我们不需要是详细区分daemon和服务,可以将两者理解为等同,即daemon就是服务。(通常说的Linux守护进程就是指daemon或者服务)。

daemon的名称通常为相应的服务后加上一个d。如cron服务的daemon为crond,http服务的daemon为httpd。

(6)linuxdeamon信号扩展阅读:

从daemon的启动和管理方式区分,可以将daemon分为两大类:可独立启动的daemon(stand alone)和由一个超级daemon(super daemon)来统一管理的daemon。

stand alone:可单独自行启动的daemon。这种daemon启动后会一直占用内存和系统资源,最大的优点是响应速度快,多用于能够随时接受远程请求的服务,如WWW的daemon(httpd)、FTP的daemon(vsftpd)等。

super daemon:由一个特殊的daemon来统一管理。这种服务通过一个统一的daemon在需要时负责唤醒,当没有远程请求时,这些服务都是未启动的,等到有远程请求过来时。

super daemon才唤醒相应的服务。当远程请求结束后,被唤醒的服务会关闭并释放系统资源。早期的super daemon是inetd,后来被xinetd替代了。

注意:super daemon本身是一个stand alone的服务,因为它需要管理后续的其他服务,所以它自己本身当然需要常驻内存中。

⑺ 我在linux c程序里见到一个deamon(0,0),请问这是什么作用啊

int daemon(int nochdir, int noclose);

参数:

当 nochdir为零时,当前目录变为根目录,否则不变;

当 noclose为零时,标准输入、标准输出版和错误输出重导权向为/dev/null,也就是不输出任何信 息,否则照样输出。

返回值:

deamon()调用了fork(),如果fork成功,那么父进程就调用_exit(2)退出,所以看到的错误信息 全部是子进程产生的。如果成功函数返回0,否则返回-1并设置errno。

⑻ linux下daemon占用CPU资源很高,怎么解决

1、守护进程就是那些不会与你见面,但在后台默默为你工作(守护着你)的进程。它版可能一直在权为你工作,也可能只是等等待着你有需要时“该出手时就出手“(等待的时候不会占用CPU)。就像Windows所说的服务一样。 2、杀死守护进程和杀死其它进程一样,先查出进程的PID(进程号): ps -ef 然后用kill命令 kill -9 XXX(XXX是你刚刚查到的PID) 3、py指的是python,python是一种编程语言。.py是用python与的程序。 4、大部分守护进程可像启动其它程序一样启动它,有些守望护进程是一个应用 里的一部分,通过运行一个要调用它的软件,或是脚本来启动它。 补充:别乱杀守护进程,有危险

阅读全文

与linuxdeamon信号相关的资料

热点内容
欣向路由器密码 浏览:850
sql数据库对比工具 浏览:575
300ap升级 浏览:981
为什么从邮箱里下载文件会不全 浏览:913
java大数据乘整数 浏览:136
cad打开文本txt文件 浏览:472
征途账号存在哪些文件 浏览:412
天气肇庆市路况工具 浏览:950
怎么导入js文件怎么打开 浏览:517
win8和linux双系统安装 浏览:328
苹果5按屏幕有紫色 浏览:272
qq已失效的文件怎么找回 浏览:63
步步高s7系统升级 浏览:179
win10双启动菜单 浏览:749
广州塔如何编程 浏览:817
如何提取指定数据到另外一列 浏览:934
macbook如何用自带软件编程 浏览:467
燕秀工具箱安装教程 浏览:995
进军大数据 浏览:480
单片机视频教程网盘 浏览:722

友情链接