![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Linux系统编程笔记
文章平均质量分 85
Linux系统编程基础笔记 C/C++
@小棋童
这个作者很懒,什么都没留下…
展开
-
Linux系统 / 网络编程 整理复习总汇
Linux系统编程/网络编程] 笔记目录。http://Linux系统编程。原创 2023-03-27 16:04:15 · 108 阅读 · 0 评论 -
线程的理解
轻量级的进程,本质仍是进程原创 2023-03-31 10:25:29 · 184 阅读 · 0 评论 -
条件变量
条件变量本身不是锁!但它也可以造成线程阻塞。通常与互斥锁配合使用。给多线程提供一个会合的场所。原创 2023-04-02 15:57:39 · 559 阅读 · 0 评论 -
信号量
由于互斥锁的粒度比较大,如果我们希望在多个线程间对某一对象的部分数据进行共享,使用互斥锁是没有办法实现的,只能将整个数据对象锁住。sem_wait: 1. 信号量大于0,则信号量-- (类比pthread_mutex_lock)但,由于sem_t的实现对用户隐藏,所以所谓的++、--操作只能通过函数来实现,而不能直接++、--符号。sem_post: 将信号量++,同时唤醒阻塞在信号量上的线程 (类比pthread_mutex_unlock)原创 2023-04-02 17:59:55 · 707 阅读 · 0 评论 -
进程组 / 会话 (了解)
也称之为作业。代表一个或多个进程的集合。每个进程都属于一个进程组。当父进程,创建子进程的时候,默认子进程与父进程属于同一进程组。进程组ID==第一个进程ID(组长进程)。所以,组长进程标识:其进程组ID==其进程ID可以使用kill -SIGKILL -进程组ID(负的)来将整个进程组内的进程全部杀死。组长进程可以创建一个进程组,创建该进程组中的进程,然后终止。只要进程组中有一个进程存在,进程组就存在,与组长进程是否终止无关。进程组创建到最后一个进程离开(终止或转移到另一个进程组)。原创 2023-03-30 15:39:06 · 316 阅读 · 0 评论 -
SIGCHLD信号(重点)
如果我们的子进程先于父进程执行,假如在父进程设置完SIGCHLD的信号捕捉函数之前所有子进程都执行结束了,那么父进程就不会再收到子进程发送的SIGCHLD信号,信号捕捉函数就不会执行,进而回收子进程的系统函数waitpid()就不会被调用,那么就会造成所有的子进程变为僵尸进程。在父进程之前死掉的子进程发送的SIGCHLD信号默认动作为忽略,所以可以将之前先于父进程死掉的子进程回收靠的并不是之前子进程的SIGCHLD信号,而是靠的后来收到的SIGCHLD信号,和waitpid函数.目前有两种方法来进行回收。原创 2023-03-29 23:38:01 · 386 阅读 · 0 评论 -
线程控制原语
编译的时候记得后面-l pthread毕竟第三方库实现。原创 2023-03-31 12:01:40 · 260 阅读 · 0 评论 -
进程控制 fork/getpid/getppid
进程控制 fork/getpid/getppid转载 2023-03-25 15:24:06 · 163 阅读 · 0 评论 -
守护进程(重点)
守护进程(Daemon Process),也就是通常说的 Daemon 进程(精灵进程),是 Linux 中的后台服务进程。在linux系统中,我们会发现在系统启动的时候有很多的进程就已经开始跑了,也称为服务,这也是我们所说的守护进程。它是一个生存期较长的进程,通常独立于控制终端(无控制终端)并且周期性地执行某种任务或等待处理某些发生的事件。守护进程程序的名称通常以字母“d”结尾:例如,syslogd 就是指管理系统日志的守护进程。守护进程是个特殊的孤儿进程,这种进程脱离终端,为什么要脱离终端呢。原创 2023-03-30 17:26:43 · 338 阅读 · 0 评论 -
线程同步(重点)
线程同步,指一个线程发出某一功能调用时,在没有得到结果之前,该调用不返回。同时其它线程为保证数据一致性,不能调用该功能。原创 2023-04-01 15:39:14 · 1746 阅读 · 0 评论 -
共享存储映射 mmap / munmap
存储映射I/O (Memory-mapped I/O) 使一个磁盘文件与存储空间中的一个缓冲区相映射。于是当从缓冲区中取数据,就相当于读文件中的相应字节。于此类似,将数据存入缓冲区,则相应的字节就自动写入文件。这样,就可在不适用read和write函数的情况下,使用地址(指针)完成I/O操作。共享内存可以说是最有用的进程间通信方式,也是最快的IPC形式, 因为进程可以直接读写内存,而不需要任何数据的拷贝。原创 2023-03-27 16:31:23 · 833 阅读 · 0 评论 -
利用线程属性 / 设置线程的分离状态
属性值不能直接设置,须使用相关函数进行操作,初始化的函数为pthread_attr_init,这个函数必须在pthread_create函数之前调用。之后须用pthread_attr_destroy函数来释放资源。原创 2023-03-31 23:08:44 · 252 阅读 · 0 评论 -
信号集操作函数
内核通过读取未决信号集来判断信号是否应被处理。信号屏蔽字mask可以影响未决信号集。而我们可以在应用程序中自定义set来改变mask。已达到屏蔽指定信号的目的。更多函数具体使用man ***的方式查看手册自定义信号集 // typedef unsigned long sigset_t;将某个信号集清0 成功:0;失败:-1将某个信号集置1 成功:0;原创 2023-03-29 16:21:33 · 784 阅读 · 0 评论 -
wait/waitpid
一个进程在终止时会关闭所有文件描述符,释放在用户空间分配的内存,但它的 PCB还保留着,内核在其中保存了一些信息:如果是正常终止则保存着退出状态,如果是异常终止则保存着导致该进程终止的信号是哪个。这个进程的父进程可以调用 wait 或 waitpid 获取这些信息,然后彻底清除掉这个进程。我们知道一个进程的退出状态可以在 Shell 中用特殊变量$?查看,因为 Shell 是它的父进程,当它终止时 Shell 调用 wait 或 waitpid 得到它的退出状态同时彻底清除掉这个进程。转载 2023-03-25 22:01:48 · 151 阅读 · 0 评论 -
信号 / kill
每个信号都有两个标志位分别表示阻塞和未决,还有一个函数指针表示处理动作。信号产生时,内核在进程控制块中设置该信号的未决标志,直到信号递达才清除该标志。原创 2023-03-29 10:35:16 · 291 阅读 · 0 评论 -
信号 捕捉
① sa_handler:指定信号捕捉后的处理函数名(即注册函数)。② sa_mask: 调用信号处理函数时,所要屏蔽的信号集合(信号屏蔽字)。注意:仅在处理函数被调用期间屏蔽生效,是临时性设置。sa_sigaction:当sa_flags被指定为SA_SIGINFO标志时,使用该信号处理程序。sa_restorer:该元素是过时的,不应该使用,POSIX.1标准将不指定该元素。③ sa_flags:通常设置为0,表使用默认属性。oldact:传出参数,旧的处理方式。act:传入参数,新的处理方式。原创 2023-03-29 20:22:49 · 288 阅读 · 0 评论 -
pipe 管道
管道是一种最基本的IPC机制,作用于有血缘关系的进程之间,完成数据传递。调用pipe系统函数即可创建一个管道原创 2023-03-26 21:30:16 · 485 阅读 · 0 评论