linux命令线程(linux 命令 线程)-冯金伟博客园

linux怎么查看一个进程的所有线程

使用ps命令

常用参数:

-a显示所有进程(等价于-e)(utility)

-a显示一个终端的所有进程,除了会话引线

-n忽略选择。

-d显示所有进程,但省略所有的会话引线(utility)

-x显示没有控制终端的进程,同时显示各个命令的具体路径。dx不可合用。(utility)

-ppid进程使用cpu的时间

-uuidorusername选择有效的用户id或者是用户名

-ggidorgroupname显示组的所有进程。

uusername显示该用户下的所有进程,且显示各个命令的详细路径。如:psuzhang;(utility)

-f全部列出,通常和其他选项联用。如:ps-faorps-fxandsoon.

-l长格式(有f,wchan,c等字段)

-j作业格式

-o用户自定义格式。

v以虚拟存储器格式显示

s以信号格式显示

-m显示所有的线程

-h显示进程的层次(和其它的命令合用,如:ps-ha)(utility)

e命令之后显示环境(如:ps-de;ps-ae)(utility)

h不显示第一行

ps命令常用用法:

1)psa显示现行终端机下的所有程序,包括其他用户的程序。

2)ps-a显示所有进程。

3)psc列出程序时,显示每个程序真正的指令名称,而不包含路径,参数或常驻服务的标示。

4)ps-e此参数的效果和指定”a”参数相同。

5)pse列出程序时,显示每个程序所使用的环境变量。

6)psf用ascii字符显示树状结构,表达程序间的相互关系。

7)ps-h显示树状结构,表示程序间的相互关系。

8)ps-n显示所有的程序,除了执行ps指令终端机下的程序之外。

9)pss采用程序信号的格式显示程序状况。

10)pss列出程序时,包括已中断的子程序资料。

11)ps-t指定终端机编号,并列出属于该终端机的程序的状况。

12)psu以用户为主的格式来显示程序状况。

13)psx显示所有程序,不以终端机来区分。

最常用的方法是ps-aux或ps-ef,然后再利用一个管道符号导向到grep去查找特定的进程,然后再对特定的进程进行操作。

linux如何保证程序运行的同时降低CPU?

linux保证程序运行的同时降低CPU。

第一步:使用top命令,然后按shift+p按照CPU排序找到占用CPU过高的进程的pid。

第二步:使用top -H -p 找到进程中消耗资源最高的线程的id。

第三步:使用echo 'obase=16;' | bc或者printf "%xn" 将线程id转换为16进制(字母要小写)。

bc是linux的计算器命令。

第四步:执行jstack |grep -A 10 ”。查看线程状态信息。

linux修改mpi线程数的命令?

修改mpi线程数的命令是vi /etc/Security/limits.conf。

关于Linux线程pthread_join的用法?

Linux系统pthread_join用于挂起当前线程(调用pthread_join的线程),直到thread指定的线程终止运行为止,当前线程才继续执行。案例代码:通过Linux下shell命令执行上面的案例代码:子线程还没有执行完毕,main函数已经退出,那么子线程也就退出了,“pthread_join(pth, NULL);”函数起作用。

Linux中,shell脚本如何使用信号机制去控制线程的开启关闭?

trap是Linux的内建命令,用于捕捉信号,trap命令可以指定收到某种信号时所执行的命令。trap命令的格式如下:trap command sig1 sig2 … sigN,当接收到sinN中任意一个信号时,执行command命令,command命令完成后继续接收到信号前的操作,直到脚本结束。 利用trap命令捕捉INT信号(即与Ctrl+c绑定的中断信号)。trap还可以忽略某些信号,将command用空字符串代替即可,如trap “” TERM INT,忽略kill %n和Ctrl+c发送的信号(kill发送的是TERM信号)。Linux更强劲的杀死进程的命令:kill -9 进程号(或kill -9 %n作业号)等价与kill -KILL 进程号。

举个例子

最近小A需要生产2015年全年的KPI数据报表,现在小A已经将生产脚本写好了,生产脚本一次只能生产指定一天的KPI数据,假设跑一次生产脚本需要5分钟,那么:

如果是循环顺序执行,那么需要时间:5 * 365 = 1825 分钟,约等于 6 天

如果是一次性放到linux后台并发执行,365个后台任务,系统可承受不住哦!

既然不能一次性把365个任务放到linux后台执行,那么,能不能实现自动地每次将N个任务放到后台并发执行呢?当然是可以的啦。

#! /bin/bash

source /etc/profile;

# —————————–

tempfifo=$$.fifo # $$表示当前执行文件的PID

begin_date=$1 # 开始时间

end_date=$2 # 结束时间

if

then

if

then

echo “Error! $begin_date is greater than $end_date”

exit 1;

fi

else

echo “Error! Not enough params.”

echo “Sample: sh loop_kpi 2015-12-01 2015-12-07”

exit 2;

fi

# —————————–

trap “exec 1000>&-;exec 1000

mkfifo $tempfifo

exec 1000$tempfifo

rm -rf $tempfifo

for ((i=1; i

do

echo >&1000

done

while

do

read -u1000

{

echo $begin_date

hive -f kpi_report.sql –hivevar date=$begin_date

echo >&1000

} &

begin_date=`date -d “+1 day $begin_date” +”%Y-%m-%d”`

done

wait

echo “done!!!!!!!!!!”

第6~22行:比如:sh loop_kpi_report.sh 2015-01-01 2015-12-01:

$1表示脚本入参的第一个参数,等于2015-01-01

$2表示脚本入参的第二个参数,等于2015-12-01

$#表示脚本入参的个数,等于2

第13行用于比较传入的两个日期的大小,>是转义

第26行:表示在脚本运行过程中,如果接收到Ctrl+C中断命令,则关闭文件描述符1000的读写,并正常退出

exec 1000>&-;表示关闭文件描述符1000的写

exec 1000

trap是捕获中断命令

第27~29行:

第27行,创建一个管道文件

第28行,将文件描述符1000与FIFO进行绑定,写的绑定,则标识对文件描述符1000的所有操作等同于对管道文件$tempfifo的操作

第29行,可能会有这样的疑问:为什么不直接使用管道文件呢?事实上这并非多此一举,管道的一个重要特性,就是读写必须同时存在,缺失某一个操作,另一个操作就是滞留,而第28行的绑定文件描述符(读、写绑定)正好解决了这个问题

第31~34行:对文件描述符1000进行写入操作。通过循环写入8个空行,这个8就是我们要定义的后台并发的线程数。为什么是写空行而不是写其它字符?因为管道文件的读取,是以行为单位的

第37~42行:

第37行,read -u1000的作用就是读取管道中的一行,在这里就是读取一个空行;每次读取管道就会减少一个空行

第39~41行,注意到第42行结尾的&吗?它表示进程放到linux后台中执行

第41行,执行完后台任务之后,往文件描述符1000中写入一个空行。这是关键所在了,由于read -u1000每次操作,都会导致管道减少一个空行,当linux后台放入了8个任务之后,由于文件描述符1000没有可读取的空行,将导致read -u1000一直处于等待。