编写一个shell脚本程序.功能是输入一个数字,给出系统中以该数字为pid的进程详情,并输出到一个文件里

编写一个shell脚本程序.功能是输入一个数字,给出系统中以该数字为pid的进程详情,并输出到一个文件里,第1张

#!/bin/sh

#使用read命令读取用户输入的数字,赋值给变量pid

read -p "Input PID: " pid

#ps命令列出所有进程,awk打印第一行标题行及进程号为pid的进程详情,输出到文件output

ps aux | awk -v n=$pid 'NR==1||$2==n{print}' >output

awk命令中,NR为内部变量,表示Number of Record,行号。$2表示第二个字段(PID)。

fork,source和exec运行脚本时的差异 使用 fork 方式运行 script 时, 就是让 shell(parent process) 产生一个 child process 去执行该 script, 当 child process 结束后, 会返回 parent process, 但 parent process 的环境是不会因 child process 的改变而改变的source 使用 source 方式运行 script 时, 就是让 script 在当前 process 内执行, 而不是产生一个 child process 来执行 由于所有执行结果均于当前 process 内完成, 若 script 的环境有所改变, 当然也会改变当前 process 环境了exec 使用 exec 方式运行script时, 它和 source 一样, 也是让 script 在当前process内执行, 但是 process 内的原代码剩下部分将被终止 同样, process 内的环境随script 改变而改变结论:通常如果我们执行时,都是默认为fork的。大家可以通过pstree命令看看关于父子进程的关系。如上,如果想让父进程得到子进程的环境变量,就是source方式了1sh的脚本[sql]#!/bin/bash A=B echo PID for 1sh before exec/source/fork:$$ export A echo 1sh: /$A is $A case $1 in exec) echo using exe exec /2sh ;; source) echo using source /2sh ;; ) echo using fork by default /2sh ;; esac echo PID for 1sh after exec/source/fork:$$ echo 1sh: /$A is $A 2sh的脚本[sql]#!/bin/bash echo PID for 2sh: $$ echo 2sh get /$A=$A from 1sh A=C export A echo 2sh: /$A is $A 3 实验31 fork[sql]

用ShellExecuteExW API传SHELLEXECUTEINFOW结构体的值来启动应用程序GetProcessId(ShExecInfohProcess);

就能获取启动应用程序的PID了。

首先脚本命令必须能够接收标准输入流命令。管道数据来自stdin,直接用变量接收即可:

cmdresult=`cat /dev/stdin`

也可以用数组和read循环读出来:

declare -a cmdresult

i=0

while read cmdresult[$i]

do

echo ${cmdresult[$i]}

let i+=1

done

uWSGI 通过 xxxini 启动后会在相同目录下生成一个 xxxpid 的文件,里面只有一行内容是 uWSGI 的主进程的进程号。

启动:

uwsgi --ini xxxini

重启:

uwsgi --reload xxxpid

停止:

uwsgi --stop xxxpid

以上是当前网上对于uwsgi重启 *** 作的最常见的描述,但是笔者通过ini文件启动时发现并没有生成xxxpid文件。于是自然的想法是通过shell脚本获取进程号并进行kill *** 作,脚本如下:

获取进程号的命令需要包含在``或$()之间,笔者在此过程中遇到过两个问题,描述如下:

中变量未加双引号,加上双引号该问题解决。

ps aux|awk '{if($8=="X"||$8=="T"||$8=="Z") {flag=1;print}}END{if(flag==0)print "Process is running normally"}'

以上就是关于编写一个shell脚本程序.功能是输入一个数字,给出系统中以该数字为pid的进程详情,并输出到一个文件里全部的内容,包括:编写一个shell脚本程序.功能是输入一个数字,给出系统中以该数字为pid的进程详情,并输出到一个文件里、exec后如何获取子进程pid、如何获取打开文件的进程的pid等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9340099.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-27
下一篇2023-04-27

发表评论

登录后才能评论

评论列表(0条)

    保存