本文收集整理关于Linux守护进程的退出的相关议题,使用内容导航快速到达。
内容导航:
Q1:linux c 守护进程如何让进程停留
是指创建守护进程么?
Debian下有个start-stop-daemon(dpkg),可以把一个前台程序运行为守护进程。
编程实现,可以用daemon调用,这个用起来简单,main函数下调用一次就可以了,别的都不用动(会重定向0,1,2,别等程序输出了)。也可以自己fork一个子进程,然后用setsid给子进程创建一个新会话,再关闭原进程,这时程序输出没有重定向。
Q2:LINUX守护进程更改与端口关闭方法
=====================================守护进程知识=====================================
linux系统有很多守护进程,大多数服务器都是用守护进程实现的。同时,守护进程完成许多系统任务,比如,作业规划进程crond、打印进程lqd等。
常用的守护进程简单介绍:
Kudzu(硬件检测) sshd(远程连接) inetd(网络连接) ldap(目录访问协议)
linux运行等级介绍:
最常用的是3,5
run level 0:是作关机用的,一开机就会作关机的动作。
run level 1:都是Single user mode模式,只允许root账号登录,主要是作一些系统维护的工作。
run level 2:可以使所有的用户登录,但不会启用NFS working,也就是没有网络功能
run level 3:可以使所有用户登录,并拥有完整的功能。包含run level 2没有的功 能,但是开机后是用文本模式
run level 4 :使用者自己定义,但是默认情况下和run level 3完全相同,
run level 5:和run level 3几乎一样,唯一的不同是开机后是图形界面,
run level 6:重启。开机后立刻重启
Chkconfig改变守护进程运行等级:
使用MAN Chkconfig 命令查看帮助信息即可知道使用方法
=====================================端口常用知识=====================================
Netstat命令使用:
Netstat -tn 查看当前开放端口
Netstat -tnl 查看监听状态的端口
Lsof配合netstat查看是什么程序启动的相对应的端口:
Lsof -i :111 查看111端口这个程序的PID值和COMMAND
kill 9441 关闭PID为9441的端口
Ntsysv图形化的工具,关闭不需要的服务
Q3:linux下的守护进程是什么意思?
进程A监控进程B,发现进程B异常退出的时候就自动重启进程B。
进程A就称为进程B的守护进程。
Q4:linux 守护进程的ppid的疑惑
如果你不是用init脚本启动而是由命令行启动的话,第一次启动的ppid是第一次daemon_init函数中第一次fork后的子进程的ID,pid是第二次fork后子进程的ID,第一次循环运行时,可能其父进程还未完全退出,或者系统清理过程还未执行,所以不是1,以后的循环中,由于第一次fork的子进程已经结束,第二次fork的子进程成为孤儿进程,被init接管,所以其ppid为1,而其自己的pid并未改变
Q5:Ubuntu Linux设置守护进程时出错的解决
Ubuntu系统使用源从7.10升级到8.04后,启动并在用户登录后,界面无响应5分钟左右后,弹出出错信息:
启动GNOME设置守护进程时出错
主题、声音或者背景设置等可能不会正常工作。
最后的错误信息是:
Did not receive a reply. Possible causes include: the remote application did not send a reply, the message bus security policy blocked the reply, the reply timeout expired, or the network connection was broken.
GNOME在您下次登录时仍将试图重启动设置守护进程
解决方法: 在启动至将要登陆到用户桌面时, 按Ctrl + Alt + F1 进入命令行模式,作如下修改:
sudo vim /etc/network/interfaces
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet dhcp
注意“eth0”最后一个字为零,而非英文字母“欧”,完成键盘输入后,按ESC,输入:
wq!
保存并退出文件的修改,使用如下命令重新启动网络服务:
sudo /etc/init.d/networking restart
或者:
sudo ifdown eth0
或者:
sudo ifup eth0
重启系统,发现问题已经解决,锐捷要求的动态ip也可以获取到,可顺利上线了。
Q6:Linux下怎么查看某个守护进程或者所有的守护进程?
查看守候进程的命令可以使用ps完成。
进程一般分为交互进程、批处理进程和守护进程(daemons)三类。值得一提的是守护进程总是活跃的,一般在后台运行,守护进程一般由系统在开机时通过脚本自动激活启动或由超级管理用户root来启动。比如在Fedora或Redhat中,我们可以定义httpd服务器的启动脚本的运行级别,此文件位于/etc/init.d目录下,文件名是httpd,/etc/init.d/httpd 就是httpd服务器的守护程序,当把它的运行级别设置为3和5时,当系统启动时,它会跟着启动。
1[root@localhost~]#chkconfig--level35httpdon由于守护进程是一直运行着的,所以它所处的状态是等待请求处理任务。例如通常大网站的Apache服务器都在运行,等待着用户来访问,也就是等待着任务处理。
Linux服务器在启动时需要启动很多系统服务,它们向本地和网络用户提供了Linux的系统功能接口,直接面向应用程序和用户。提供这些服务的程序是由运行在后台的守护进程来执行的。守护进程是生存期长的一种进程。它们独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。它们常常在系统引导装入时启动,在系统关闭时终止。Linux系统有很多守护进程,大多数服务器都是用守护进程实现的。同时,守护进程完成许多系统任务,比如,作业规划进程crond、打印进程lqd等。有些书籍和资料也把守护进程称为"服务"。选择运行哪些守护进程,要根据具体需求决定。查看系统可以提供的守护进程对应的服务,打开一个终端以root权限运行ntsysv命令。
wWW.YIjItao※.coM
Q7:如何以守护进程在linux系统下执行
编写守护进程程序的要点:
(1)让程序在后台执行。方法是调用fork()产生一个子进程,然后使父进程退出。
(2)调用setsid()创建一个新对话期。控制终端、登录会话和进程组通常是从父进程继承下来的,守护进程要摆脱它们,不受它们的影响,方法是调用setsid()使进程成为一个会话组长。setsid()调用成功后,进程成为新的会话组长和进程组长,并与原来的登录会话、进程组和控制终端脱离。
(3)禁止进程重新打开控制终端。经过以上步骤,进程已经成为一个无终端的会话组长,但是它可以重新申请打开一个终端。为了避免这种情况发生,可以通过使进程不再是会话组长来实现。再一次通过fork()创建新的子进程,使调用fork的进程退出。
(4)关闭不再需要的文件描述符。子进程从父进程继承打开的文件描述符。如不关闭,将会浪费系统资源,造成进程所在的文件系统无法卸下以及引起无法预料的错误。首先获得最高文件描述符值,然后用一个循环程序,关闭0到最高文件描述符值的所有文件描述符。
(5)将当前目录更改为根目录。
(6)子进程从父进程继承的文件创建屏蔽字可能会拒绝某些许可权。为防止这一点,使用unmask(0)将屏蔽字清零。
(7)处理SIGCHLD信号。对于服务器进程,在请求到来时往往生成子进程处理请求。如果父进程不等待子进程结束,子进程将成为僵尸进程(zombie),从而占用系统资源。如果父进程等待子进程结束,将增加父进程的负担,影响服务器进程的并发性能。在Linux下可以简单地将SIGCHLD信号的操作设为SIG_IGN。这样,子进程结束时不会产生僵尸进程。