1、查看进程多个线程
ps -T -p
会显示
进程/线程ID
PID SPID
top -Hp
会显示进程/线程ID
但是与ps不同的是,线程iD是以轻量进程ID显示,看不出来哪个线程属于哪个进程,主进程iD多少。
Linux 系统级获取pID与SPID,与ps top指令看到的一样。
pid_t pid = getpid(); // 获取进程 ID
pid_t spid = gettid(); // 获取线程 ID
当spid与pid相等时,表示为主线程
posix获取线程号pthread_t
pthread_t thread = pthread_self() ;
pthread_t类型本质上是一个描述线程的透明结构体指针。
pthread_t->uintptr_t,uintptr_t 理念就是用整数表示的指针类型
实际上pthread_t 结构体里包含pid与spid,但是因为是透明指针,无法获取其真实的结构体详情,所以无法从pthread_t获取到pid与spid。可以通过特殊手法也能获取到。
2、查看进程绑定核情况
taskset -p pid
显示的十进制数字6—>转换为2进制是110,每个1对应一个cpu,所以进程运行在#1,#2cpu上(cpu从0开始)
启动时绑核:
#启动时绑定到第二个cpu
taskset -c 1 ./xxxbin &
#启动时绑定到第1个cpu,第3个cpu
taskset -c 0,2 ./xxxbin &
(cpu从0开始)
启动后绑定
按CPU数直接绑核
taskset -cp 1,2,5,11 9865 将进程9864绑定到#1、#2、#5、#11号核上面。
taskset -cp 1,2,5-11 9865 将进程9864绑定到#1、#2、#5~#11号核上面。
注意,cpu的标号是从0开始的,所以cpu1表示第二个cpu(第一个cpu的标号是0)。
3、top 指令中的PR
Linux进程的优先级分为两个类别:
普通进程
实时进程
每种类别的优先级计算方法也不同,对系统行为的影响也各不相同。
普通进程,优先级受Nice值影响,Nice-》[-20,19],其中-20表最高优先级,19表最低优先级,
PR=20 + NI,其中PR NI都是top指令输出表中列名,NI=Nice,默认情况下,新创建的进程继承父进程Nice值,通常为0.
实时进程优先级:
实时进程具有更高优先级,可以保证能够及时得到CPU响应。
实时进程 PR= -1 - RT
RT是实时优先级,RT 范围从1-99,99是最高优先级。
设置普通进程Nice值,
nice -n -5 ./xxxbin,或者使用renice 重新设置进程nice值。
设置实时进程优先级
chrt -rr 50 ./xxxbin
只有root用户才能设置负的的nice值或实时优先级
4、grep 时排除指定文件和目录
–exclude=FILE_PATTERN skip files and directories matching FILE_PATTERN
–exclude-from=FILE skip files matching any file pattern from FILE
–exclude-dir=PATTERN directories that match PATTERN will be skipped
grep -rn --exclude-dir=build_* --exclude-dir=kernel --exclude-dir=drivers --exclude=*.out ‘abcdefg’ .
grep --exclude-dir=“.svn” U_BOOT_CMD * -nR --exclude=“cscope.out” --exclude=“tags”
Linux多线程与进程调试技巧

被折叠的 条评论
为什么被折叠?



