显示系统中所有非root用户的进程:它们是谁、PID是多少及在做什么。
时间: 2024-01-21 10:16:38 浏览: 19
您可以使用以下命令列出系统中所有非root用户的进程:
```
ps -U $(echo $(w | awk 'NR>2{print $1}' | sort -u)) -u $(echo $(w | awk 'NR>2{print $1}' | sort -u) | sed 's/ /,/g')
```
该命令使用 `ps` 命令来列出所有进程,并使用 `awk` 和 `sort` 命令从 `w` 命令的输出中提取非root用户的用户名。然后,它将这些用户名传递给 `ps` 命令的 `-U` 和 `-u` 选项,以显示对应用户的进程信息。
该命令显示的信息包括进程的用户名、PID、CPU利用率、内存利用率、启动时间和命令行参数。您可以根据需要调整命令来显示所需的信息。
相关问题
linux 设计一个模块,该模块的功能是列出系统中所有内核进程的程序名、PID号和进程状态。
好的,这是一个比较典型的 Linux 内核模块开发问题。首先,需要了解一下 Linux 内核模块的基本结构和编写方法。
Linux 内核模块的基本结构包括:
1. 头文件:包含必要的头文件,如 `linux/module.h`、`linux/kernel.h`、`linux/init.h` 等。
2. 模块信息:包括模块的名称、作者、许可证等信息。
3. 初始化函数:模块加载时调用的函数,通常为 `init_module()`。
4. 清理函数:模块卸载时调用的函数,通常为 `cleanup_module()`。
在本例中,我们需要实现一个模块,用于列出系统中所有内核进程的程序名、PID 号和进程状态。下面是一个简单的实现:
```c
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/init.h>
#include <linux/sched/signal.h>
MODULE_LICENSE("GPL");
MODULE_AUTHOR("Your Name");
MODULE_DESCRIPTION("List all kernel processes");
static int __init list_kernel_processes_init(void)
{
struct task_struct *task;
printk(KERN_INFO "Listing all kernel processes:\n");
for_each_process(task) {
printk(KERN_INFO " %s [%d] (state: %ld)\n", task->comm, task->pid, task->state);
}
return 0;
}
static void __exit list_kernel_processes_exit(void)
{
printk(KERN_INFO "Module unloaded\n");
}
module_init(list_kernel_processes_init);
module_exit(list_kernel_processes_exit);
```
在上面的代码中,我们定义了两个函数:`list_kernel_processes_init()` 和 `list_kernel_processes_exit()`,分别用于模块加载和卸载时的初始化和清理工作。在 `list_kernel_processes_init()` 函数中,我们使用了 Linux 内核中的 `for_each_process()` 宏来遍历系统中的所有进程,并输出它们的程序名、PID 号和进程状态。最后,我们使用了 `module_init()` 和 `module_exit()` 宏来指定模块的初始化和清理函数。
需要注意的是,由于本模块需要访问系统的进程信息,因此需要以 root 用户权限加载该模块。
以上就是一个简单的 Linux 内核模块实现,用于列出系统中所有内核进程的程序名、PID 号和进程状态。
Linux系统如何查看用户正在运行的进程,有示例吗?
可以使用`ps`命令来查看Linux系统中正在运行的进程和它们的相关信息。常见的用法有:
1. 查看所有进程:`ps -ef`
2. 查看指定用户的进程:`ps -u username`
3. 查看指定进程的详细信息:`ps -p pid -o pid,ppid,user,%cpu,%mem,cmd`
其中,`pid`为进程ID,`ppid`为父进程ID,`user`为进程所属用户,`%cpu`为CPU占用率,`%mem`为内存占用率,`cmd`为进程命令。
示例:
1. 查看所有进程:
```
$ ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 03:11 ? 00:00:01 /sbin/init
root 2 0 0 03:11 ? 00:00:00 [kthreadd]
root 3 2 0 03:11 ? 00:00:00 [rcu_gp]
...
```
2. 查看指定用户的进程:
```
$ ps -u username
PID TTY TIME CMD
1234 ? 00:00:00 bash
5678 ? 00:00:00 sshd
```
3. 查看指定进程的详细信息:
```
$ ps -p 1234 -o pid,ppid,user,%cpu,%mem,cmd
PID PPID USER %CPU %MEM CMD
1234 5678 username 0.0 0.1 bash
```