进程管理:理解和操作/proc目录

一、/proc目录的概述

/proc目录是一个虚拟文件系统,它提供了一个关于正在运行的系统进程的实时全面的视图。该目录下的内容是动态生成的,它们反映了当前正在系统中运行的进程的实时状态。

/proc目录下的文件和子目录都具有一些特殊的属性,在文件系统中不具备通常的文件或目录该有的属性。这些文件或目录是在内核中维护的,它们提供了一个接口,通过这个接口可以查询或控制进程信息。

在Linux系统中,/proc是一个非常重要的目录。它不仅提供了一个快速的,实时的,查看进程信息的方式,而且它提供了用户进程与内核之间的一个接口,它允许用户访问内存、系统状态、运行进程等信息,这些信息很多都是以某种形式出现在/proc目录下。

二、访问进程信息

在/proc目录下,以数字命名的子目录代表着的进程ID,比如/proc/100是进程号为100的进程。可以通过在shell中输入命令“cd /proc/$PID”进入到相应的进程目录下,$PID是你想查看的进程ID。进入该目录后,将可以看到各种进程相关的文件。其中,最常用的文件如下:

-stat:包含关于进程的各种统计信息,比如PID,正在运行状态以及占用CPU时间。
-cmdline:该文件包含一个NUL字节终止的进程启动命令行。
-environ:包含该进程的环境变量列表。
-mem:可以被用来访问该进程的代表内存映像的段的文件,它的内容可以用来检查或修改该进程的内存。
-smaps:包含有关该进程映射到它的地址空间的内存段的详细信息。
-status:包含有关进程的当前状态、更多特殊信息以及占用的内存信息。
-io:包含有关该进程的I/O访问情况的信息。

三、进程管理操作

在/proc目录上的操作包括以下内容:

1. 杀死进程

kill命令可以杀死一个进程。它可以使用进程ID或信号来操作进程,命令格式如下:

kill [-s 信号] 进程ID

如果省略信号,则默认发送TERM信号,这将导致进程正常退出。如果信号值为9,则将强制杀死进程。如果希望杀死进程组,则指定负的进程ID。比如:

kill -9 100
kill -9 -100

2. 显示进程信息

ps命令可以显示当前正在运行的进程信息。使用ps命令可以列出进程的PID,状态,运行时间等信息。命令格式如下:

ps [选项]

其中,选项可以是以下几种:

-a:显示所有进程,包括其他用户的进程
-u:显示进程的用户ID和启动时间
-x:显示没有控制终端的进程
-e:等同于-a选项

3. 创建守护进程

守护进程是在后台运行的进程,它常常用于无需用户交互的任务,比如系统监控、日志记录、后台任务。在Linux中,通过fork()函数创建子进程,使子进程脱离父进程成为守护进程,在Linux中,创建一个守护进程的步骤如下:

1. fork()以创建一个新进程,父进程退出,子进程继续执行。
2. 调用setsid()函数创建一个新的会话,这将使新进程拥有一个新的进程组ID及一个新的会话ID。
3. 关闭标准输入、标准输出、标准错误输出。
4. 打开/dev/null文件,将标准输入、标准输出、标准错误输出都重定向到该文件。这样,即使程序再收到用户输入,也不会有任何反应。

下面是一个简单的守护进程程序:

#include 
#include 
#include 
#include 
#include 
#include 

int main()
{
    pid_t pid;

    pid = fork();
    if(pid  0)
    {
        exit(EXIT_SUCCESS);
    }

    if(setsid() < 0)
    {
        exit(EXIT_FAILURE);
    }

    signal(SIGCHLD, SIG_IGN);
    signal(SIGHUP, SIG_IGN);

    pid = fork();
    if(pid  0)
    {
        exit(EXIT_SUCCESS);
    }

    umask(0);

    chdir("/");

    close(STDIN_FILENO);
    close(STDOUT_FILENO);
    close(STDERR_FILENO);

    openlog("mydaemon", LOG_PID, LOG_DAEMON);
    syslog(LOG_INFO, "mydaemon started");

    while(1)
    {
      sleep(60);
    }

    syslog(LOG_INFO, "mydaemon terminated");
    closelog();

    return EXIT_SUCCESS;
}

四、小结

/proc目录是一个非常重要的Linux目录,它提供了一个实时的,全面的,访问进程信息的方式。通过/proc目录,我们可以方便地查看进程信息,杀死进程,创建守护进程等等操作。在Linux相关开发和运维工作中,/proc目录是一个非常重要的资源。

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/257025.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝小蓝
上一篇 2024-12-15 12:43
下一篇 2024-12-15 12:43

相关推荐

  • Python栈操作用法介绍

    如果你是一位Python开发工程师,那么你必须掌握Python中的栈操作。在Python中,栈是一个容器,提供后进先出(LIFO)的原则。这篇文章将通过多个方面详细地阐述Pytho…

    编程 2025-04-29
  • Rclone复制所有目录

    如果你需要将本地文件复制到云端,或者从云端复制文件到本地,Rclone是一个非常好的选择。本文将介绍如何使用Rclone复制所有目录。 一、安装Rclone 首先,你需要在你的机器…

    编程 2025-04-29
  • Python操作数组

    本文将从多个方面详细介绍如何使用Python操作5个数组成的列表。 一、数组的定义 数组是一种用于存储相同类型数据的数据结构。Python中的数组是通过列表来实现的,列表中可以存放…

    编程 2025-04-29
  • Python操作MySQL

    本文将从以下几个方面对Python操作MySQL进行详细阐述: 一、连接MySQL数据库 在使用Python操作MySQL之前,我们需要先连接MySQL数据库。在Python中,我…

    编程 2025-04-29
  • 如何通过jstack工具列出假死的java进程

    假死的java进程是指在运行过程中出现了某些问题导致进程停止响应,此时无法通过正常的方式关闭或者重启该进程。在这种情况下,我们可以借助jstack工具来获取该进程的进程号和线程号,…

    编程 2025-04-29
  • Python磁盘操作全方位解析

    本篇文章将从多个方面对Python磁盘操作进行详细阐述,包括文件读写、文件夹创建、删除、文件搜索与遍历、文件重命名、移动、复制、文件权限修改等常用操作。 一、文件读写操作 文件读写…

    编程 2025-04-29
  • Python代码实现回文数最少操作次数

    本文将介绍如何使用Python解决一道经典的回文数问题:给定一个数n,按照一定规则对它进行若干次操作,使得n成为回文数,求最少的操作次数。 一、问题分析 首先,我们需要了解回文数的…

    编程 2025-04-29
  • 二级考级舞蹈大全目录

    本文将从以下多个方面对二级考级舞蹈大全目录进行详细阐述。 一、目录结构 二级考级舞蹈大全目录主要分为三级,即一级目录、二级目录和三级目录。其中,一级目录为舞蹈类型,二级目录为舞蹈名…

    编程 2025-04-29
  • Python元祖操作用法介绍

    本文将从多个方面对Python元祖的操作进行详细阐述。包括:元祖定义及初始化、元祖遍历、元祖切片、元祖合并及比较、元祖解包等内容。 一、元祖定义及初始化 元祖在Python中属于序…

    编程 2025-04-29
  • 如何用Python对数据进行离散化操作

    数据离散化是指将连续的数据转化为离散的数据,一般是用于数据挖掘和数据分析中,可以帮助我们更好的理解数据,从而更好地进行决策和分析。Python作为一种高效的编程语言,在数据处理和分…

    编程 2025-04-29

发表回复

登录后才能评论