linux进程控制

本文探讨了守护进程(daemons)的基本概念及其在Linux系统中的作用。详细介绍了如何通过调用setsid实现守护进程与终端的脱离,并解释了守护进程作为进程组领导者的特点。此外,还讨论了守护进程错误日志记录的重要性及实现方式,并通过fork函数创建子进程的具体应用进行了说明。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

daemon守护进程

    守护进程就是没有控制终端,在后台运行。在系统自举时开始运行,直到系统停止运行。

    那么守护进程的处理结构?怎样写一个守护进程并且如何知晓在系统出现错误的时候能及时的报告状态。

    可能是因为daemons调用了setsid导致用户层的daemons没有控制终端。

    所有的用户层的daemons是进程组的leader、sessionleader和process group和session 中的唯一线程。大部分的daemons的父进程是init进程。

    错误日志记录

    如何处理错误信息是守护进程必需面对的问题,不仅仅是写到标准错误输出上,因为没有控制终端。我们并不希望所有的daemons都将信息写到控制台上,

    有很多基站,有的运行的是windows系统。我们也不希望每个daemon都将错误信息写入一个独立的文件中,需要一个控制daemon错误记录的工具。

类似于syslog的函数有这样的功能

fork函数

 linux中,只有一个函数可以创建子进程:fork

  

#include<sys/types.h>
#include<unistd.h>
pid_tfork(void);

       f o r k创建的新进程被称为子进程( childprocess)。该函数被调用一次,但返回两次。两次返回的区别是子进程的返回值是0,而父进程的返回值则是新子进程的进程I D。将子进程I D返回给父进程的理由是:因为一个进程的子进程可以多于一个,所以没有一个函数使一个进程可以获得其所有子进程的进程I Df o r k使子进程得到返回值0的理由是:一个进程只会有一个父进程,所以子进程总是可以调用g e t p p i d以获得其父进程的进程I D (进程ID 0总是由交换进程使用,所以一个子进程的进程I D不可能为0 )

使用fork()函数,返回的总是parent(返回值为child的pid)

 

Fork函数生成当前进程的子进程,从fork()语句后执行操作,可以根据返回的pid值为父进程和子进程分配工作。

#include<stdio.h>
#include<unistd.h>
main()
{
pid_t pid;
printf(“Nowonly one process\n” );
printf(“Callingfork…\n”);
pid=fork();
if (!pid)
printf(“I’m thechild\n”);
else if(pid>0)
printf(“I’m theparent, child has pid %d\n”,pid);
else
print (“Forkfail!\n”);
}
 

exec函数

覆盖原进程,而不是生成一个新的进程;

终止进程

Exit()

进程同步

Wait()

man 2 wait

若子进程终止了,但是父进程没有调用wait()方法等待回收,这个进程会变为”zombie”进程,所谓的僵死进程。内核会维护僵死进程的最少信息(pid,终止状态, 资源占用信息),为了等待父进程调用wait()来获取僵死进程的信息。若父进程忘记调用wait来回收子进程的资源,那么会占用内核的进程表,一旦进程表分配满了,会导致内核无法分配进程。如果父进程退出了,那么僵死进程会被init进程接管,init进程会自动调用wait来释放僵死进程占用的资源。

进程属性

进程标识符pid

环境变量

修改lib库的路径

vim /etc/ld.so.conf

加入/usr/local/lib(绝对路径)

执行sudo ldconfig命令

 

修改~/.bashrc文件

# User specific aliases and functions
set PYTHON_PATH=/usr/local/lib/python/
export PYTHON_PATH
set PATH=$PYTHON_PATH:$PATH
export PATH
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值