Linux
文章平均质量分 74
Nessie_zhao
这个作者很懒,什么都没留下…
展开
-
守护进程
什么是守护进程?? 守护进程(也称精灵进程)是一类在后台运行的特殊进程,用于执行特定的系统任务。很多守护进程在系统引导的时候启动,并且一直运行直到系统关闭。另一些只在需要的时候才启动,完成任务后就自动结束。守护进程通常采用以d结尾的名字,表示Daemon,如:crond(设置定时任务),httpd。 一个守护进程的父进程是init进程,因为它真正的父进程在fork出子进程后就先于子进程exit退原创 2018-04-30 09:19:20 · 432 阅读 · 0 评论 -
进程的创建, 等待, 终止.
1.进程创建(1)fork函数初识在Linux中fork哈拿书是非常重要的函数,它从已存在进程中创建一个新进程。新进程为子进程,而原进程为父进程。头文件:#include函数原型:pid_t fork(void);返回值:子进程中返回0,父进程返回子进程id;出错返回-1。进程调用fork,当控制转移到内核中的fork代码后,内核做:a.分配新的内存块和内核数据结构给子原创 2018-03-29 20:38:33 · 300 阅读 · 0 评论 -
task_struct结构体
1.在Linux中描述进程的结构体叫做task_struct2.task_struct是Linux内核的一种数据结构,它会被装载到PAM(内存)里并且包含着进程的信息3.task_struct内容的分类标识符:描述本进程的唯一标识符,用来区别其他进程。状态:任务状态,退出代码,退出信号等。优先级:相对于其他进程的优先级。程序计数器:程序中即将被执行的下一条指令的地址。内原创 2018-03-29 10:54:38 · 525 阅读 · 0 评论 -
环境变量相关的函数和命令
环境变量1.概念指在操作系统中用来指定操作系统运行环境的一些参数。环境变量通常具有特殊用途,在系统中具有全局特性。2.常见的环境变量(1)PATH:指定命令的搜索路径(2)HOME:指定用户的主工作目录(即用户登录到Linux系统中时,默认的目录)(3)HISTSIZE:指保存历史命令记录的条数(4)SHELL:当前Shell,它的值通常是/bin/bash3.查看原创 2018-03-29 10:08:15 · 427 阅读 · 0 评论 -
模拟实现僵尸进程, 孤儿进程的场景
进程状态为了弄明白正在运行的程序是什么意思,我们需要知道进程的不同状态。一个进程可以有几个状态。R运行状态(running):并不意味着进程一定在运行中,它表明进程要么是在运行中要么在运行队列里。S睡眠状态(sleeping):意味着进程在等待时间完成(这里的睡眠有时候也叫做可中断睡眠(interruptible sleep))。D磁盘休眠状态(Disk sleep):有时候也叫不原创 2018-03-28 22:35:32 · 307 阅读 · 0 评论 -
进程的调度算法
操作系统的调用分为3种:a.远程调度(创建新的进程)b.中程调度(交换功能的一部分)c.短程调度(下次执行哪个进程)当发生下面几种情况的时候会调用短程调度器:a.时钟中断b.I/O中断c.操作系统调用d.信号进程调度算法:a.先来先服务(FCFS)/先进先出(FIFO)b.短作业优先(SPN)c.时间片轮转d.最高响应比优先e.高优先权调度算法(1)原创 2018-03-25 18:34:04 · 495 阅读 · 0 评论 -
Linux 开发工具
1.除了vim, 还有哪些常用的牛逼的编辑器, 并能够横向对比编辑器之间的区别和优缺点. (1)vim是从vi发展出来的一个文本编辑器。代码补完、编译错误跳转等方面得功能特别丰富,在程序员中被广泛使用。(2)sed是一种流编辑器,他一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”,接着用sed命令处理缓冲区内容,处理完成后,把缓冲区的内容送往屏幕。接着处原创 2018-03-25 14:19:28 · 256 阅读 · 0 评论 -
在Linux下实现进度条程序.
首先编写进度条程序#include#includeint main(main){ int i=0; char buf[102]="#"; for(i=1;i<=100;i++) { buf[i]='#'; printf("[%-100s][%d%%]\r",buf,i); fflush(stdout); usleep(100000); } printf("\n原创 2018-03-25 12:17:37 · 192 阅读 · 0 评论 -
Linux使用命令安装gcc/g++, gdb, vim
1.安装gcc/g++(1)使用yum来配置gcc和g++,若要安装gcc,则在命令行中输入:yum -y install gcc,按回车键就能够进行gcc的安装。因为已经安装过所以Nothing to do(2)若要安装g++,则需要在命令行中输入:yum -y install gcc-c++,就能够进行g++的安装。 2.安装gdb(1)先切换到原创 2018-03-25 11:30:42 · 234 阅读 · 0 评论 -
对Linux的进一步了解
1、进入目录需要哪些权限, 在目录中执行增删查(cd, touch, ls, rm, mv等)改文件动作, 需要哪些权限 cd: cd 目录名(进入目录) 所需权限x touch: touch 文件名(创建文件) 所需权限wx ls: ls (显示当前目录下的所有文件) 所需权限rx rm: ...原创 2018-03-18 12:21:00 · 175 阅读 · 0 评论 -
Linux部分指令
1、(1)man 1 命令 man 2 系统apz man 3 c库函数 man 4 特殊文件驱动 man 5 配置文件 man 6 游戏 man 7 某一个主题 man 8 系统管理员使用的命令(2)bin:binary的缩写。存放二进制可执行明命令,用来引导启动所需的命令或普通用户可能用的命令boot:存放引导加载器使用的文件,包括核心映像dev:存...原创 2018-03-18 08:51:53 · 196 阅读 · 0 评论 -
实现函数 process_create
封装fork/wait等操作, 编写函数 process_create(pid_t* pid, void* func, void* arg) func回调函数就是子进程执行的入口函数, arg是传递给func回调函数的参数. #include#include#includeint process_create(int(*func)(),const char* file,char* arg原创 2018-03-30 10:25:17 · 462 阅读 · 0 评论 -
编写自主shell.
#include#include#include#include#include#include#include#include#include#includeint main(){ char** arg = NULL; char cmd[128]; char *my_arg[32]; while(1) { printf("myshell#"); fgets原创 2018-04-02 17:06:33 · 181 阅读 · 0 评论 -
线程控制
POSIX线程库(用户级)与线程有关的函数构成了一个完整的系列,绝大多数函数的名字以“pthread_”开头 要使用这些函数库,要通过引入头文 链接这些线程函数库时要使用编译器命令的“-lpthread”选项 用户线程和内核线程是1对1的一、线程创建pthread_create函数头文件:#include<pthread.h>函数原型:int pthread_create(pthread原创 2018-04-30 21:46:39 · 194 阅读 · 0 评论 -
线程的同步与互斥
线程的同步与互斥:互斥:当一个公共资源同一时刻只能被一个进程或线程使用,多个进程或线程不能同时使用公共资源。如:当线程A在使用打印机时,其他线程都需要等待。同步:两个或两个以上的进程或线程在运行过程中协同步调,按预定的先后次序运行。如:A任务的运行依赖B任务产生的数据。同步保证了线程运行的顺序性,互斥保证了线程运行的安全性。同步是一种更为复杂的互斥,而互斥是一种特殊的同步。互斥具有唯一性和原创 2018-05-01 14:32:27 · 3374 阅读 · 0 评论 -
信号的捕捉与可重入函数
信号的捕捉在信号的相关概念中曾提到如果一个信号没有被Block,但被Pending,但不会立即递达,而是在合适的时候,这里的合适的时候是指:当进程从内核态返回用户态时,会对信息进行检测处理。正如下图所示,是系统在对信号进行捕捉时经历的过程: 可以简化为:首先先来介绍一下什么是信号捕捉: 如果信号的处理动作是用户自定义函数,在信号递达时就调用这个函数,这称为信号捕捉那么内...原创 2018-04-29 13:53:39 · 290 阅读 · 0 评论 -
信号的相关概念
信号的概念:信号机制是进程之间相互传递消息的一种方法,信号全称为软中断信号,也有人称作软中断。 软中断信号用来通知进程发生了异步事件,进程之间可以互相通过系统调用kill发送软中断信号。内核也可以因为内部事件而给进程发送信号,通知进程发生了某个事件。注意,信号只是用来通知某进程发生了什么事件,并不给进程传递任何数据。 收到信号的进程对各种信号有不同的处理方法。具体方法在下文会有详细的介绍。进程通原创 2018-04-26 10:43:56 · 982 阅读 · 0 评论 -
死锁
死锁的概念:死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。一个线程也会产生死锁问题(没有释放)。死锁产生的4个必要条件: (1)互斥条件:一个资源每次只能被一个进程使用,若其他进程想要访问该资源,只能等占有该资源的进程使用完后释放该资源原创 2018-04-25 12:04:42 · 175 阅读 · 0 评论 -
线程
什么是线程??在一个程序里的,一个执行路线就叫做线程(thread)。更准确的说:线程是一个进程内部的控制序列。一个进程至少有一个执行线程。若在单个程序同时运行多个线程完成不同的工作,称为多线程。 Linux中没有真正意义上的线程,是用进程来模拟线程线程的特点:在多线程中,通常是在一个进程中包括多个线程,每个线程都是作为利用CPU的基本单位,是花费最小开销的实体。线程具有以下属性: (1)轻型实原创 2018-04-23 09:19:17 · 233 阅读 · 0 评论 -
pipe相关代码的实现
pipe头文件:#include<unistd.h>功能:创建一个无名管道函数原型:int pipe(int fd[2]);//分别以读、写方式打开,所以有两个文件描述符参数:fd:文件描述符数组,其中fd[0]表示读端,fd[1]表示写端返回值:成功返回0,失败返回错误码管道的特点 -管道自带互斥与同步机制 -管道只能单向通信 -只要有血缘关系的两个进程就可以进行进程间通信 -管原创 2018-04-06 14:43:55 · 941 阅读 · 0 评论 -
编写简单的函数并将其打包成静/动态库
写一个数学库实现加、减法 1.首先touch 4个文件:add.c、add.h、sub.c、sub.h 两个 “.c”文件提供方法实现,两个“.h”文件提供方法声明。 注:库里面不能有main()函数,main()函数是程序的入口。编写“.h”文件#pragma once#include<stdio.h>int myadd(int x,int y);#pragma once#includ原创 2018-04-06 08:38:09 · 701 阅读 · 0 评论 -
文件相关系统调用接口open/write/read/close
1.写(write)#include<stdio.h>#include<sys/types.h>#include<sys/stat.h>#include<fcntl.h>#include<unistd.h>int main(){ int fd = open("file",O_WRONLY|O_CREAT,0644);//以只写方式打开或不存在的话创建 if(fd < 0)原创 2018-04-05 16:52:22 · 565 阅读 · 0 评论 -
fd与FILE结构体的纵向对比
文件描述符(fd) 对于Linux而言,所有对设备(对于Linux而言,一切皆文件)和文件的操作都使用文件描述符来进行的。文件描述符是用来访问文件的。 文件描述符是一个非负的整数,是一个索引值,指向内核中每个进程打开文件的记录表。 当打开一个现存文件或创建一个新文件时,内核就向进程返回一个文件描述符用于后续对文件的读写操作;当需要读文件时,也需要把文件描述符作为参数传递给相应的函数。 通常情原创 2018-04-05 11:27:09 · 249 阅读 · 0 评论 -
进程组、作业、会话之间的关系
进程组:概念:进程组是一个或多个进程的集合每个进程除了有一个进程ID之外,还属于一个进程组。通常与同一个作业相关联,可以接收到来自同一个终端的信号。每个进程组有一个唯一标识的进程组ID。每个进程组都可以有一个组长进程,组长进程的ID等于进程ID组长进程可以创建一个进程组,创建该组的进程,然后终止,只要该进程组中有一个进程存在,无论组长进程是否终止,该进程组都是存在的 就好比一个班级的班长原创 2018-04-29 19:16:34 · 388 阅读 · 0 评论