显示特定用户正在运行的后台进程

显示特定用户正在运行的后台进程

我是 ubuntu linux 新手,遇到了一个小问题:我需要编写一个 shell 脚本来显示特定用户在后台启动的进程。用户名是一个位置参数。我将不胜感激。

答案1

这个答案解释了一些基础知识,并提供了参考。您仍然需要做一些研究并付出一些努力来根据实际需求进行调整。

首先,让我们从一些基本术语开始:Bash 是 Ubuntu 的默认命令行解释器。这意味着 bash 脚本由您的“常规”命令组成,就像您要通过在终端中编写每个命令来执行它们一样(甚至启动程序),还有一些允许您自动执行或重复执行操作的功能。

每个脚本都必须以操作系统应使用哪种解释器的定义开始。对于 bash 来说,它将是:#!/bin/bash

我们将使用的命令带有ps一些附加参数。

来自ps手册页:

ps displays information about a selection of the active processes.
If you want a repetitive update of the selection and the displayed
information, use top(1) instead.

您可以ps在此处阅读有关我们将要使用的参数的更多信息:PS(1) - Linux 手册页

要搜索命令的输出,我们将使用grep,它允许您搜索特定的字符串或模式。有关 grep 的更多信息,请参见:grep(1) - Linux 手册页

脚本本身非常短(命令和参数):

#!/bin/bash

ps -aux |grep $1

答案2

下一个命令将显示someuser在后台运行的进程:

ps -U someuser -l -H | grep " S "

在哪里

   -l     Long format.  The -y option is often useful with this.
   -H     Show process hierarchy (forest).

grep " S "将仅过滤后台进程

作为参考,使用

man ps

如果您想将其用作脚本,请创建一个文件:

nano procs.sh

内容如下:

#!/bin/bash
ps -U $1 -l -H | grep " S "

或下一个:

ps S -l -u $1

打开终端:

通过以下方式允许其执行:

chmod +x procs.sh

运行:

./procs.sh someuser

在此处输入图片描述

在此处输入图片描述

user@ubuntu2004:~$ touch procs.sh
user@ubuntu2004:~$ echo 'ps -U $1 -l -H | grep " S "' > procs.sh 
user@ubuntu2004:~$ cat procs.sh 
ps -U $1 -l -H | grep " S "
user@ubuntu2004:~$ chmod +x procs.sh 
user@ubuntu2004:~$ ./procs.sh user
F S   UID     PID    PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
4 S  1000    1677    1634  0  80   0 - 43863 poll_s tty2     00:00:00 gdm-x-session
4 S  1000    1699    1677  4  80   0 - 129191 ep_pol tty2    00:00:08   Xorg
0 S  1000    1753    1677  0  80   0 - 50570 poll_s tty2     00:00:00   gnome-session-b

touch procs.sh创建一个空文件,procs.sh文件名为 user@ubuntu2004:~$ echo 'ps -U $1 -l -H | grep " S "' > procs.shps -U $1 -l -H | grep " S "命令发送到procs.sh文件中。可以使用文本编辑器手动添加

关于位置参数

位置参数是调用脚本时提供给脚本的参数。它可以从 到$1$N当 N 由多位数字组成时,必须将其括在括号中,如${N}。变量$0basename调用程序时的 。

$1将代表第一个脚本的参数,
$2将代表第二个脚本的参数,依此类推

在脚本中,您将第一个参数称为 a$1并在命令中用作myscript firstargument。 Bash 将$1firstargument单词替换。

相关内容