某系统中有n个进程,每个进程都有自己唯一的进程id(PID),同时每个进程最多还有一个父进程,父进程id为(PPID),和一个或多个子进程。 若某进程没有父进程,则PPID为0。 当某一进程被终止时,其子进程也将被终止。 现给出进程id列表和起对应的父进程id列表,当要终止某一进程时,计算最终会终止哪些进程,并将要终止的PID按升序排列。 输入描述: 第一行输入两个整数n和k,n表示当前系统中运行的进程数;k表示要终止进程的PID 第二行输入n个正整数,表示进程列表,每个整数表示进程的PID 第三行输入n个正整数,表示进程列表中的进程对应的父进程PPID列表。 输出描述: 输出当进程k终止时,所有会被终止的进程PID,并按PID升序排列,每个PID用空格分隔。
时间: 2023-03-23 19:00:16 浏览: 142
算法思路:
- 建立一个哈希表,将每个进程的 PID 与其所有子进程的 PID 存储在一个列表中。
- 找到要终止的进程 k 及其所有子孙进程,然后递归删除它们的所有子孙进程。
- 输出所有要终止的进程的 PID,按升序排列。
Python 代码实现:
相关问题
linux查找内存使用最多前10个进程及详细内容
在Linux系统中,你可以使用`top`命令或`htop`(提供更详细的视图)来查看当前系统的内存使用情况,并通过排序功能找出占用内存最多的前几个进程。以下是使用这两个工具的基本步骤:
1. 打开终端:`Ctrl + Alt + T` 或者 `Terminal`。
2. 使用`top`命令:
```
$ top
```
按下`Shift + P`键并输入`%MEM`对进程按内存占用百分比排序。然后按`n`键逐页查看,找到占内存最多的进程,通常第一列显示PID(进程ID),第二列是内存使用百分比。
3. 如果你想查看每个进程的详细信息,可以使用`pss`或`ps -eo pss,rss`(Physical Size of Set Size 和 Resident Set Size)来查看物理内存和虚拟内存使用量。
4. 使用`htop`:
```
$ htop
```
进入界面后同样选择`%MEM`排序,它会直接展示出占用内存最多的进程列表,同时提供更多的交互式选项,如F9进行快速排序。
5. 为了查找特定文件或服务所对应的进程,可以结合`pgrep`命令,例如:
```
$ pgrep -u <username> <process_name>
```
其中 `<username>`是你想要搜索的用户,`<process_name>`是进程名。
用c语言编写一段程序,使用系统调用fork( )创建一个子进程。当此程序运行时,在系统中有一个父进程和一个子进程活动。让每一个进程在屏幕上显示一个字符:父进程显示'a',子进程显示字符'b'。试观察记录屏幕上的显示结果,并分析原因。
在C语言中,你可以使用`fork()`函数来创建一个新的子进程,这个函数属于unistd.h头文件。下面是一个简单的示例程序,它首先创建一个子进程,然后每个进程分别打印字符:
```c
#include <stdio.h>
#include <unistd.h>
#define MAX PROCESSES 2 // 限制最多两个进程
int main() {
pid_t pid; // 子进程ID
char message[] = {'a', 'b'};
for (int i = 0; i < MAX; i++) { // 循环创建进程
if ((pid = fork()) == -1) { // fork失败处理
perror("Fork failed");
return 1;
}
if (pid == 0) { // 子进程
printf("This is child process %d, displaying '%c'\n", getpid(), message[i]);
exit(0); // 程序结束
} else { // 父进程
printf("This is parent process %d, displaying '%c'\n", getpid(), message[i]);
}
}
return 0;
}
```
当你运行这个程序时,你会看到屏幕上交替显示"A"和"B",这是因为父进程和子进程在循环内的每次迭代都会独立运行。父进程会先打印,然后轮到子进程打印。每个进程都有自己的副本,它们各自独立执行直到退出。
阅读全文