知识学习及备忘

1. 根据进程名获取ID,同时可以判断该进程是否在运行。若是预先知道进程id,可以根据进程id知道该进程是否运行。

linux中通过proc获取进程名以及PID_JDSH0224的博客-CSDN博客_proc 进程名

2. linux system使用注意,封装后使用

Linux下使用system函数一定要谨慎_去级得骨灰的博客-CSDN博客_linux下system函数

3. localtime和localtime_r

此函数线程不安全函数,在实际中发现,发现time获取的秒数正确,而localtime转换后错误,locatime_r转换正确。localtime返回的是静态的地址,造成多线程访问时转换结果错误。
但localtime和localtime_r都会加锁,在多线程和多进程时容易造成死锁。
需实现一个线程安全且无锁的localtime函数
被 gettimeofday害死,又一个线程不安全函数,有没有线程安全代替品? - 第2页 - C/C++-Chinaunix
localtime函数的死锁风险_小米技术的博客-CSDN博客
localtime函数死锁分析 | 咕咕

localtime死锁风险

localtime函数的死锁风险

4. mq_timedreceive
查看网址:Linux中posix消息队列系统函数mq_timedreceive()谨慎使用_愤怒的呆鱼的博客-CSDN博客_mq_timedreceive
mq_timedreceive 进行超时等待使用的是系统的绝对时间,而不是输入的秒/毫秒数。发生校时时,此函数等待超时时间会受到影响。

5. timer作为线程运行时,定时时间可以基于系统时钟,而不是绝对时间

timer线程驱动的可以设置成与时间无关。先详看如下网址,再详述!
linux 下的clock_gettime() 获取精确时间函数 - 独孤酷酷 - 博客园
clock()、time()、clock_gettime()和gettimeofday()函数的用法和区别 - krythur - 博客园
linux下常用的几个时间函数:time,gettimeofday,clock_gettime,_ftime_pk_20140716的博客-CSDN博客
Linux内核时钟系统和定时器实现_walker沃克的博客-CSDN博客_itimerspec

6. select当使用无线等待时,close后select不一定会返回,尽量使用超时。

close select阻塞模式不返回
https://bbs.csdn.net/topics/390769866
Linux select函数问题 调用close关闭socket时,select并不会退出等待_oidnwu的博客-CSDN博客
linux下的select用于串口接收数据时,select函数无法返回的问题_qiuxin315的博客-CSDN博客

7. backtrace

8. 程序中core dump设定

在程序中使用getrlimit 和 setrlimit设置core dump文件大小
参考:
linux下core dump - AlanTu - 博客园 linux下core dump

使用system设定core dump文件路径
使用 echo /路径/core > /proc/sys/kernel/core_pattern 设置core dump路径
参考:Linux生成core文件、core文件路径设置_yhc166188的博客-CSDN博客_core 文件目录 Linux生成core文件、core文件路径设置

若截取 SIGSEGV后将不会产生core dump 文件,可以在截取函数最后加入signal(SIGSEGV, SIG_DFL)
参考:截取 SIGSEGV 将不会产生 core dump 文件_span76的博客-CSDN博客

9.  –fno-stack-protector -fstack-protector -fstack-protector-all -fstack-protector-strong
GCC 中的编译器堆栈保护技术
IBM Developer
inux下缓冲区溢出攻击的原理及对策
IBM Developer

10. pthread_create 传参问题
参数应该在堆上或者全局区
http://ju.outofmemory.cn/entry/115724 pthread_create 传递参数的注意点

11. strace

强大的strace命令用法详解_CC_小硕的博客-CSDN博客_strace用法

12. bootchart Linux启动优化

13. IDA Pro 静态反编译工具

14. errno

常见的errno,它返回标准的错误码。errno不应该是一个局部变量。几乎每个函数都应该可以访问他,但他又不能作为是一个全局变量。否则在一个线程里输出的很可能是另一个线程的。关于实现原理和定义自己的errno查看:linux errno简介之线程安全_yangzai_0551的博客-CSDN博客_errno 线程安全

15.时间递增clock_gettime、gettimeofday

clock_gettime支持时间递增获取,不受校时影响,gettimeofday受校时影响。clock_gettime性能比gettimeofday差。gettimeofday/clock_gettime_MyObject-C的博客-CSDN博客_clock_gettime gettimeofday

16. 多线程与CACHE一致性

变量都是从内存中读取到缓存,操作后先更新到缓存中,条件满足时(如CACHE内容被置换或者或者CACHE写穿/通模式)更新到缓存中。在单核CPU上,其实不会存在各个线程读取变量不一致问题(DMA和硬件更新该变量除外,因为DMA和硬件更新不经过缓存直接到内存),因为读取变量时都是先缓存后内存,使用不使用volatile其实没有多大用处。多线程写需保证线程安全操作。

在多核CPU上,每核CPU都有自己的缓存,如果变量非volatile,那么每个核在操作变量后都是写回自己的缓存,并没有立刻更新到内存中,这个时候即使是线程安全的,也不能保证每个线程(线程会分配到多CPU上)用到的是真实的值。若变量定义成volatile型,该变量在更新到缓存的同时会被更新到内存上,如果发现该变量在其它缓存上有副本,就会发出信号通知其它缓存上的CPU,使其无效,并从内存上获取。

结论:单核上多线程其实volatile对变量作用不大(非DMA和硬件操作),多核上多线程需要定义volatile型。需要再次核对。

volatile的作用总结与理解_梦否的博客-CSDN博客_volatile作用

多线程基础——缓存一致性_城南孔乙己的博客-CSDN博客_多线程缓存

计算机中内存、cache和寄存器之间的关系及区别_燕山暮雪的博客-CSDN博客_寄存器和cache的区别

 17. 读写锁/顺序锁--顺序锁比读写锁性能更优?

18. linux下查看socket端口属于哪个进程

sudo lsof -i :端口号

sudo netstat -tlnp | grep 端口号

sudo ss -tlnp | grep 端口号

sudo fuser 端口号/tcp

sudo ps -ef | grep 进程名

sudo ls -l /proc/$(sudo lsof -t -i:端口号) | grep exe

https://baijiahao.baidu.com/s?id=1760063714341774733&wfr=spider&for=pc

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值