![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
linux
笔记
最爱你了
这个作者很懒,什么都没留下…
展开
-
守护进程Linux
1_10守护进程守护进程:运行周期长,在后台运行,不和用户交互会话会话sid会话首进程的id作为这个会话的id会话首进程:一般是bash会话里面有很多进程进程组,进程组的第一个进程id命名这个进程,进程消失,进程组名不变,除非整个进程消失,进程组才会消失。即使第一个进程消失,会话id不变。printf("pid=%d,sid=%d,gid=%d\n",getpid(),getsid(0),getpgrp());为了防止关闭窗口进程结束,关闭之后重新开辟一个会话,将要守护的进程移到这个进程原创 2022-04-03 20:37:20 · 52 阅读 · 0 评论 -
2_14shell编程(脚本编程)
2_14shell编程(脚本编程)像搭积木一样,一层一样一般是my.sh .sh结尾chmod u+x my.sh//添加执行权限,Linux可执行文件是以EFL开始的//添加了执行权限之后就可以用./my.sh执行bash my.sh //执行#!/usr/bin/bash //设置解释器echo "hello"exit 0c/c++ 编译型:xx.c 编译生成二进制的可执行程序,直接运行可执行程序,因为可直接运行,所以运行效率高一些。原创 2022-04-03 20:19:30 · 94 阅读 · 0 评论 -
poll
12_30 I/O复用poll1.如果一个一个字符读取,有几个字符就读去几次,因为接收缓冲区内还有数据2.如果直接结束客户端,select就会收到这个描述符上有读事件,recv就不会受到数据0,就会知道已经关闭,然后就关闭它。int poll(struct pollfd* fds,nfds_t nfds,int timeout);struct pollfd{ int fd;//文件描述符 short events;//注册的事件 short revents;//实际发生的事件,由内核填充原创 2022-03-23 18:47:47 · 39 阅读 · 0 评论 -
网络编程tcp协议
tcp特点:面向连接 可靠的 流式服务(数据排序)三次握手建立连接 connect四次挥手断开连接 close应答重传 超时重传 去重 乱序重排滑动窗口 流量控制多进程实现多个客户端同时发送服务器#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <string.h>#include <assert.h>#include <原创 2022-03-23 18:40:55 · 101 阅读 · 0 评论 -
I/O复用select
12-27 I/O复用selectint select(int nfds,fd_set*readfds,fd_set* writefds,fd_set*exceptfds,struct timeval*timeout);nfds是文件描述符的总数 ,写事件,读事件,异常事件,超时时间有一个集合有1024个位,开始都是0,每一个位代表一个描述符,1代表这个描述符是有的FD_ZERO(fd_set*fdset) ;//清除所有位FD_SET(int fd,fd_set*fdset);//设置某原创 2022-03-23 18:36:05 · 69 阅读 · 0 评论 -
线程与进程
线程与进程当两个线程都要加同一个值,同时都加就相当于加了一次因为是多核处理器,有两个处理器共同运行,可能少加几次,如果是一个处理器同一时刻只有一个运行,一个执行路径,不可能有某一时刻同时修改i本来运行值应该是5000,但是可能少计几次小于5000可以加一个信号量让一个进程执行完之后在执行下一个进程,不在乎哪一个进程先执行#include<stdio.h>#include<stdlib.h>#include<unistd.h>#include<stri原创 2022-03-23 13:21:19 · 45 阅读 · 0 评论 -
进程的并发执行
线程:进程内部的一条执行路径进程:一个正在运行的程序单线程:只有一条执行路径多线程:有多个执行路径主函数的执行路径:主线程函数:子线程pthread_creat()pthread_exit()pthread_join()原创 2021-11-25 21:19:23 · 1436 阅读 · 0 评论 -
2021-10-28调试一个程序
调试一个程序gcc -o a a.c -ggdb a加一个断点 b查看所有断点 info breakr 执行程序s 进入函数p 打印n 单步执行跟踪子进程 在fork之前执行 set follow-fok-mode child原创 2021-10-28 21:12:53 · 50 阅读 · 0 评论 -
2021-10-25系统调用与库函数
系统调用与库函数printf函数 最后调用的还是writewrite(1,"hello",5)//0(标准输入) 1(标准输出) 2(标准错误输出) 5个字符 write是一个系统调用,printf是调用库函数系统调用先中端,现场保护,根据系统调用号由操作系统来执行,进入内核,现场恢复。(write,fork,open,)系统调用都是一些用户无法完成的,需要进入内核。库函数都是我们能实现的。硬件>内核>系统调用>库一个新进程都要先fork后exec#include<原创 2021-10-25 16:03:12 · 205 阅读 · 0 评论 -
2021-10-24替换进程exec系列
替换进程exec系列execlexeclp 可以不用绝对路径execleexecv 参数用一个数组代替execvp调用库函数execve系统(和上面的都是调用这个)加上环境变量这几个都没有太大区别至少是参数不一样,最后一个参数必须是空替换成功原来的程序就没有了,不需要往下执行,成功不返回,失败才返回。fork是从当前位置往下复制,一般fork与exec是一起执行的,先创建一个进程,然后替换这个进程。which ps 查看这个进程的位置execlp("/usr/bin/ps原创 2021-10-24 17:36:49 · 77 阅读 · 0 评论 -
2021-10-24先打开文件再复制文件
先打开文件再复制文件1.子进程可以使用父进程打开的文件2.文件偏移量父子进程共享PCB进程控制块(进程描述符)struct task_struct 里面有一个 文件表里面弄记录了这个进程打开的文件,每一个进程都会默认打开三个文件0标准输入(stdin) 1标准输出(stdout) 2标准错误输出(stderr) ,一般文件表1024个空间,在要打开一个文件则在3号位置打开打开文件的返回值就是3,再打开文件值就是4(文件描述符),每一次使用的都是下标最小。文件描述符:0 1 2数字 open的原创 2021-10-24 17:16:37 · 68 阅读 · 0 评论 -
操作文件的系统调用
操作文件的系统调用open read write closelinux读文件#include<stdio.h>#incldue<stdlib.h>#include<unistd.h>#include<fcntl.h>#include<assert.h>int fd=open("file.text",0,O_RDONLY);assert(fd!=-1);char buff[128]={0};int n=read(fd,buf原创 2021-10-17 20:23:20 · 51 阅读 · 0 评论 -
僵死进程&&写时拷贝技术
僵死进程僵死:子进程先结束,父进程没有调用wait获取子进程的退出码,那么子进程就变成僵死状态。解决将死进程:父进程调用wait() (但是子进程没有结束,那么就会阻塞一段时间知道子进程结束。写时拷贝技术当复制一个进程是,如果页表里面的东西一样,并不会重新创建一个空间,但如果你修改了子进程东西,就要重新创建一个空间...原创 2021-10-17 19:53:53 · 45 阅读 · 0 评论 -
三个题
三个题1.求打印了多少个Aint main(){for(int i=0;i<2;i++){fork();printf("A\n");}}答案:打印了6个A第一次循环,子进程打印了一次,有调用了一个子进程,子进程的子进程打印一次,子进程的第二次循环有打印一次,父进程有打印了一次。第二次循环:父进程打印一次,子进程打印一次。2.当printf去掉\nint main(){for(int i=0;i<2;i++){fork();printf("A");}}原创 2021-10-17 17:56:41 · 282 阅读 · 0 评论 -
逻辑地址
逻辑地址逻辑地址并不是物理地址,一般指针指向的都是逻辑地址。地址指的是,在分配的一块地址空间里的相对地址,可以通过查询“页表”查到在内核中的地址乘上4,再加上相对地址,就是真正的物理地址。...原创 2021-10-16 16:41:45 · 284 阅读 · 0 评论 -
printf方法&&fork进程赋值
ldd 查询可执行文件用到了那些共享库printf方法1.必须在程序结束完成之后才会输出,(并不是卡了),如果加了sleep(3),就是在三秒后打印到屏幕上,并不是执行到printf时就打印int main(){printf("hello\n");//如果加了\n就会直接输出sleep(3);exit(0);//}2.如果换成_exit(0);就不会输出3.也可以在printf后面加一个刷新函数fflush(stdout); 也可以直接输出fork复制进程申请一个pid ,将一个原创 2021-10-16 16:35:45 · 165 阅读 · 0 评论