Linux 进程 线程

1.Linux查看进程

        1.1ps aux 列出所用正在运行的进程的详细信息

        1.2ps -ef  列出所用正在运行的进程的详细信息,以全格式显示

        1.3Top    实时显示系统中正在运行的进程和系统性能信息

        1.4Pstree  以树状结构显示进程之间的关系

        1.5ps axj   显示当前进程以及进程之间的关系

2.什么是进程

        2.1进程的概念

                进程是程序一次动态执行过程,包括创建、调度、消亡

        2.2进程和程序的区别

                程序(a.out)是静态的,它是保存在磁盘是的指令的有序集合,没有任何执行概念

                进程(./a.out)是动态的,执行时包括创建

        2.3进程是程序执行和资源(内存)管理的最小单位

                因为每个进程都有一个0~4G的虚拟内存

        2.4进程的类型

                (1)交互进程:有shell控制和运行,既能在前台运行也可以在后台运行·

                前台运行:R+ 后台运行:R

                (2)   守护进程:在后台运行,一般在系统启动是开始执行,系统关闭时才结束

                (3)批处理进程:该进程不属于终端,它被提交到一个队列中以便顺序执行

        2.5进程运行状态

                (1)   运行态:此时进程正在运行或者准备运行

                (2)等待态:此时进程等待一个事件的发生和某种系统资源

                                        可中断·  不可·中断               

                (3)停止态:此时进程停止

                (4)僵死态: 已经终止但还占有一个task_struct结构体

为了更好的管理Linux所访问的资源,系统在内核头文件include/linux/sched.h定义了进程控制块(PCB)结构体task_struct来管理每个进程的资源

内核空间进程资源即PCB相关的信息,包括进程控制块本身,打开的文件表项、当前目录、当前终端信息、线程基本信息、可以访问内存地址空间、PID、PPID、UID、EUID等,也就是说,内核通过PCB结构体可以访问到进程的所有资源信息

                (5)死亡态:

        2.6进程的模式

                用户与内核

                nice:按用户指定优先级运行进程

                renice:改变正在运行优先级的进程

        2.7进程相关的系统调用

进程创建
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
int main(int argc, const char *argv[])
{
	//创建进程
	pid_t pid = fork();
	//判断
	if(pid < 0)
	{
		printf("fort error");
		return -1;
	}else if(pid > 0)
	{
		printf("i am father");
	}else
	{
		printf("i am child");
	}
	return 0;
}

                2.8.getpid getppid

    else if(pid > 0)
	{
		while(1)
		{
		printf("i am father %d\n",getpid());
		sleep(2);
		}
	}else
	{
		while(1)
		{
		printf("i am child %d %d\n",getppid(),getpid());
		sleep(2);
		}

                2.9进程退出

                        exit(0)   不会刷新缓存区

                        _exit(0)  刷新缓存区

                        return  0;

                3.0孤儿进程

                        父进程先于子进程退出,子进程会被systemd进程收养,子进程会变成后台进程

                3.1僵尸进程

                        子进程先于父进程退出,父进程还没有来的及收回子进程资源(PCB结构体)

                        如何避免僵尸进程:子进程退出时父进程及时收回

                        调用wait和waitpid

                         wait使函数阻塞,知道任意一个子进程结束或收到某一信号

                        waitpid可以指定某一子进程以及等待的方式(阻塞或非阻塞)

                        exec函数组

                        以列表形式传参

3.守护进程

                 3.1特点

                        从系统启动开始运行,系统关闭时停止运行

                        后台进程与终端无关

                3.2进程与终端关系

                        与终端不能有亲缘关系

                        把控制终端变成?

                 3.3守护进程创建

                        创建子进程,父进程退出

                        在子进程创建新会话

                        改变当前根目录

                        重设文件权限掩码

                        关闭文件表述符

#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/stat.h>
int main(int argc, const char *argv[])
{
	 pid_t pid = fork();
	 if(pid < 0)
	 {
		 printf("fort error");
		 return -1;
	 }else if(pid > 0)
	 {
		 //父进程退出
		 exit(0);
	 }
	 //创建新绘画
	 setsid();
	 //更改根目录
	 chdir("/");
	 //重设文件权限掩码
	 umask(0777);
	 //关闭文件描述符
	int i = 0;
	for(i = 0; i < getdtablesize(); i++)
	{
		close(i);
	}
	 while(1);
	return 0;
}

4.通信的相关概念

        4.1通信的模式

                单工:A-->B (键盘输入)

                半双工:A-->B 或者 B-->A

                双工:A<-->B                 

                同步:有规律、有顺序、有节奏

               异步:无规律、无顺序、无节奏

                4.2信号安装

                        

void(*signal(int siganl,void(*handler)(int))(int);
//创建信号
//参数一:sigunm:指定函数
//参数二:SIG_IGN:忽略该信号
          SIG_DFL:采用系统默认方式处理函数
            自定义函数处理函数指针
//返回值:成功:设置之前的信号处理方式 失败:-1
                4.3alarm
函数原型:unsigned int alarm(unsigned int secondes)
参数一:seconds:指定秒数
返回值:成功:如果调用此alarm()前,进程已经设置了闹钟时间,则返回上一个闹钟的剩余时间,否则返回0
        失败:-1
                4.4pause
                4.5kill
                4.6raise

有名信号量

有名信号量:进程间的同步

无名信号量:线程间的同步

消息队列

  1. 创建并打开消息队列
  2. 添加消息
  3. 接收消息
  4. 删除消息队列
  5. 线程

    1. 线程的相关概念
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值