Linux总结-----1
Posted 小鹿可可乐
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux总结-----1相关的知识,希望对你有一定的参考价值。
1. gdb(调试程序)
编译文件为调试版本:
g++ -o main main.cpp -g // 编译成调试文件 main 为调试文件
- 开始调试 输入指令 gdb main
- 加断点
在你需要让程序暂停运行的地方加上断点
一般用法:1、b 文件名:行数 2、 b 文件名:函数名
例如: b main.cpp:15
b main.cpp:fun(int)
(文件名和一般函数名用table键补齐,不要自己敲) - 运行:r(r main)
- 显示main函数所在的文件源代码 L (小写)
- 运行到下一行,遇到函数不进入函数(单步执行) n
- 继续执行 c
- 进入函数 s
- 跳出函数 f
- 显示函数调用栈 bt
- 打印p
- 退出q
线程调试:
在多线程启动之后,输入info threads 打印出目前线程的信息和编号。输入 t 1 切换到线程1 、 t 2切换到线程2……
2.库文件
库是一组预先编译好的函数的集合
1、存放:
库文件:/lib或/usr/lib
头文件:/usr/include
2、静态库与共享库
静态库:libxxx.a
共享库:libxxx.so
区别: 静态库用到的方法会包含到可执行程序中,共享库不包含,只做标记,运行程序时,才动态链接
3.fork()
1、复制进程:先申请PID,复制PCB(进程控制块),再复制进程实体
2、写时拷贝:以页为单位
父子没有修改的页面,先共享,若有修改再复制,用于节省内存空间,使fork用到的次数最小
3、进程虚拟地址空间:4G 大小。每个进程都有
虚拟内存:磁盘上划分,不是真实存在,解决内存不够用的问题,引入虚拟内存后就可让系统运行比物理内存还要大的应用程序。
4.僵死进程
子进程先于父进程结束,父进程没有获得子进程的退出码
处理方法:1.父进程调用wait()方法
2.忽略 signal SIGCHLD(仅Linux中)
5.进程间通信
进程间通信(ipc机制):管道,信号量,共享内存,消息队列,套接字
5.1管道
1、有名管道和无名管道
有名管道:可以在任意进程间通信
无名管道:只能在父子进程间通信
2、写入管道的数据在内存中
3、管道是一个半双工的通信方式
5.2信号量
作用:同步进程
1、信号量的值一般取正,代表背后可访问的资源数目
2、P操作:获取资源,信号量-1
V操作:释放资源,信号量+1
3、依据取值范围划分:
二值信号量:0,1
计数信号量:3
4、临界资源:同一时刻只允许一个进程访问的资源
临界区:访问临界资源的代码段
5、依次打印ABC
5.3共享内存
把一个物理内存空间映射到两个不同进程地址空间中
共享内存一经创建,主动移除才会消失,或重启系统
ipcs:查看共享内存(-m)、消息队列(-q)、信号量(-s)
5.4消息队列
在获取同一个消息时,不需要加锁,内部有锁
6.线程
1、线程:进程内部的一条执行路径(序列)调度执行
进程:一个正在运行的程序,资源分配
2、创建线程:pthread_create();//Linux
3、查看当前进程有多少个线程:ps -eLf
-L 显示线程信息(id …)
4.实现
7.同步
1、同步的方法:信号量,互斥锁,条件变量,读写锁
2、同步的目的:对程序的执行流程进行控制,保证同一时刻只能有一个人访问临界资源,使程序的正确性有保证
3.线程安全的函数:可在线程中使用,多线程不管怎么调度,都正确
今天也要好好学习呀~
以上是关于Linux总结-----1的主要内容,如果未能解决你的问题,请参考以下文章