Linux总结-----1

Posted 小鹿可可乐

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux总结-----1相关的知识,希望对你有一定的参考价值。

1. gdb(调试程序)

编译文件为调试版本:

g++ -o main main.cpp -g  // 编译成调试文件     main 为调试文件
  1. 开始调试 输入指令 gdb main
  2. 加断点
    在你需要让程序暂停运行的地方加上断点
    一般用法:1、b 文件名:行数 2、 b 文件名:函数名
    例如: b main.cpp:15
    b main.cpp:fun(int)
    (文件名和一般函数名用table键补齐,不要自己敲)
  3. 运行:r(r main)
  4. 显示main函数所在的文件源代码 L (小写)
  5. 运行到下一行,遇到函数不进入函数(单步执行) n
  6. 继续执行 c
  7. 进入函数 s
  8. 跳出函数 f
  9. 显示函数调用栈 bt
  10. 打印p
  11. 退出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的主要内容,如果未能解决你的问题,请参考以下文章

python常用代码片段总结

[linux][c/c++]代码片段02

查看发票组代码后的总结和有感

回归 | js实用代码片段的封装与总结(持续更新中...)

[linux][c/c++]代码片段01

linux中怎么查看mysql数据库版本