unix中的进程标识以及使用场景

一、前言

本文将介绍unix系统中的进程标识以及使用场景。进程标识和用户标识类似,只不过其指代的对象是一个进程。我们常把进程标识称为进程ID,本文将讨论如下内容:
1.什么是进程标识?
2.特殊的进程标识
3.如果获取以及使用进程标识?

二、什么是进程标识?

简单来说,进程标识就是一个用于指定某个进程的非负整数,其具有唯一性。(每个进程只有一个进程标识)
如下图所示:
在这里插入图片描述

(2-1)
上图中的PID指的就是进程ID。
进程标识的唯一性指的是一个进程只有一个进程ID,但如果一个进程终止了,那么其进程ID就会被后续新创建的进程所使用。
值得一提的是,unix系统对于终止进程的ID采用了延迟复用算法,使得新创建的进程不使用刚终止的进程ID。

三、特殊的进程标识

在众多进程中,有一些进程是比较特殊的,它们执行着较为特殊的任务:

3.1 调度进程

进程ID为0的进程是调度进程,也被称为交换进程,该进程是内核的一部分,它不执行任何磁盘上的程序。

3.2 init进程

该进程是应用层执行的第一个进程,其进程ID为1,在内核初始化完成后就会调用该进程,该进程主要完成应用层的初始化工作,通过读取一些系统配置文件将系统设置成既定的运行状态。init进程是不会终止的,它是一个无限循环。
与调度进程不同,init进程是一个普通的用户进程,但它以超级用户特权运行。
另外,init进程还是所有孤儿进程的父进程。

四、如何获取以及使用进程标识?

unix系统提供了很多函数来获取进程相关的标识。(这里说的标识不单只是进程ID,还有用户ID、组ID)
如下所示:

#include <unistd.h> pid_t getpid(void); //返回调用进程的进程ID
pid_t getppid(void); // 返回调用进程的父进程ID
uid_t getuid(void); //返回调用进程的实际用户ID
uid_t geteuid(void); //返回调用进程的有效用户ID
gid_t getgid(void); //返回调用进程的实际组ID
gid_t getegid(void); //返回调用进程的实际组ID

ps:这些函数都没有错误返回。

写一个代码,在程序中创建一个以实际用户id和进程id名命名的文件,参考代码如下:

/*************************************************************************> File Name: pid_uid_test.c> Author: conbiao> Created Time: 2024年09月21日 星期六 09时59分55秒************************************************************************//************************************************************************                             HEADER**********************************************************************/
#include<stdio.h>
#include<fcntl.h>
#include<unistd.h>/************************************************************************                              MACRO**********************************************************************//************************************************************************                          GLOBAL VARIABLE**********************************************************************//************************************************************************                       FUNCTION DESCRIPTION**********************************************************************/
int create_puid_file(void);/***********************************************************************
* FUNCTION NAME: create_puid_file***********************************************************************
*
* Summary:
*   create file use pid and uid
*
* Params:
*   NONE.
*
* Return:
*   O if success.
*  -1 if fail.
*
***********************************************************************/
int create_puid_file(void)
{pid_t pid;uid_t uid;int fl;char file_name[30];printf("%s: start!\n",__func__);//get pid//获取pidpid = getpid();//get uid//获取uiduid = getuid();//Combine UID and PID into a file name.//将uid和pid组合成文件名sprintf(file_name, "%d_%d",pid,uid);printf("%s: filename is %s\n",__func__,file_name);//Create a filefl = creat(file_name, S_IRUSR | S_IWUSR);if(fl == -1)return fl;printf("%s: create file success!\n",__func__);return 0;}/************************************************************************                                MAIN**********************************************************************/
int main(int argc, char *argv[])
{int ret = 0;ret = create_puid_file();return ret;
}

运行结果如下所示:
在这里插入图片描述

(4-1)

参考资料:

《UNIX环境高级编程(第3版) (史蒂文斯 (W.Richard Stevens) 拉戈 (Stephen A.Rago))
(Z-Library)》

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1541160.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

神经网络推理加速入门——一个例子看懂流水

之前的两篇文章介绍了流水这一技术&#xff0c;它用来进行程序的性能加速&#xff0c;本篇通过一个生活中的小例子&#xff0c;让大家更直观的了解什么是流水。 举个例子 早晨从起床到上班出门&#xff0c;我们一般会做以下几件事&#xff1a;刷牙、烧水、喝水、出门。 如果…

全球爆发勒索病毒“永恒之蓝” 解决方案在此

英国、意大利、俄罗斯等全球多个国家爆发勒索病毒攻击&#xff0c;中国大批高校也出现感染情况&#xff0c;众多师生的电脑文件被病毒加密&#xff0c;只有支付赎金才能恢复。据360安全卫士紧急公告&#xff0c;不法分子使用NSA泄漏的黑客武器攻击Windows漏洞&#xff0c;把ONI…

新品亮相|美格智能SLM530/SLM530P智能模组,助力金融新零售智慧升级

随着金融支付产业数字化与智能化不断推进&#xff0c;泛支付场景一体化解决方案成为行业发展的新趋势&#xff0c;从手持POS机到智能收款机&#xff0c;金融支付领域需要更快速、更精准、更安全的解决方案&#xff0c;加快推进数字化升级进程。 近期&#xff0c;美格智能正式发…

JavaWeb - 5 - 前端工程化

一.前后端分离开发 前后端混合开发 缺点&#xff1a;沟通成本高&#xff0c;分工不明确&#xff0c;不便管理&#xff0c;不便维护拓展 前后端分离开发 当前最为主流的开发模式&#xff1a;前后端分离 前后端分离开发中很重要的是API接口文档&#xff08;如&#xff1a;YApi&…

1--SpringBoot外卖项目介绍及环境搭建 详解

目录 软件开发整体流程 软件开发流程 角色分工 软件环境 苍穹外卖项目介绍 项目介绍 产品原型 技术选型 开发环境搭建 前端环境搭建 后端环境搭建 完善登录功能 导入接口文档 Swagger 介绍 使用方式 常用注解 软件开发整体流程 软件开发流程 需求分析&#x…

JavaWeb的Filter详解

过滤器Filter 什么是Filter&#xff1f; 依据字面上的中文意思为过滤器。Filter的作用 当用户的请求到达指定的URL之前&#xff0c;可以借助Filter来改变这些请求的内容&#xff1b;同样地&#xff0c;当响应结果到达客户端之前&#xff0c;可以使用Filter修改输出的内容。什么…

基于springboot的驾校管理系统的设计与实现 (含源码+sql+视频导入教程)

&#x1f449;文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1 、功能描述 基于springboot的驾校管理系统4拥有三种角色&#xff0c;分别为管理员、教练、学员。 管理员&#xff1a;学员/教练管理、报名管理、车辆管理、教练分配管理、课程安排管理、考勤打卡管理…

数字化转型的理论框架对比:从多维视角指导企业成功变革对比DPBOKIT4ITCOBITTOGAF

数字化转型的多维框架解析 在数字化时代&#xff0c;企业如何有效实现数字化转型已成为其生存和发展的关键问题。然而&#xff0c;市场上关于数字化管理的各种框架和理论并存&#xff0c;企业需要根据自身的需求选择最适合的指导路径。本文将通过对几个核心理论框架的对比&…

【随手笔记】使用J-LINK读写芯片内存数据

第一种使用JLINK.exe 1. 打开j-link.exe 2.输入【usb】 3. 连接芯片 输入【connect】输入芯片型号【STM32L071RB】输入连接方式 【S】 使用SWD连接方式输入连接速率 【4000】连接成功 4. 输入【&#xff1f;】查看指令提示 5. 读写指令 Mem Mem [<Zone>…

C++:分苹果【排列组合】

描述 把M个同样的苹果放到N个同样的盘子里&#xff0c;允许有的盘子空着不放&#xff0c;问共有多少种不同的分法&#xff1f;&#xff08;用K表示&#xff09;&#xff0c;5&#xff0c;1&#xff0c;1和1&#xff0c;5&#xff0c;1是同一种分法。 输入描述 两个整数M和N&…

数据仓库建模方法论 :ER模型(三范式)

ER模型之三范式&#xff1a; 其实范式有很多&#xff0c;这一系列范式就是指在设计关系型数据库时&#xff0c;需要遵从的不同的规范。关系型数据库的范式一共有六种&#xff0c;分别是第一范式&#xff08;1NF&#xff09;、第二范式&#xff08;2NF&#xff09;、第三范式&am…

【变化检测】基于ChangeStar建筑物(LEVIR-CD)变化检测实战及ONNX推理

主要内容如下&#xff1a; 1、LEVIR-CD数据集介绍及下载 2、运行环境安装 3、ChangeStar模型训练与预测 4、Onnx运行及可视化 运行环境&#xff1a;Python3.8&#xff0c;torch1.12.0cu113&#xff0c;onnxruntime-gpu1.12.0 likyoo变化检测源码&#xff1a;https://github.c…

雷老师使用指南

Raymond ——原微软10年资深Office产品经理、微软人才顾问。全网50万粉丝《雷老师讲AI》主理人。现任知场科技CEO、企业培训师、职业生涯咨询师、启迪之星创业导师、个人IP孵化教练。 / 1. 雷老师是谁&#xff1f; / 我的英文名叫Raymond&#xff0c;在微软大家都叫我雷曼…

好物分享之一个神级网络扫描工具,零基础入门到精通,收藏这一篇就够了

WatchYourLAN 是一个局域网&#xff08;LAN&#xff09;监控工具。它通过扫描局域网内的设备&#xff0c;提供设备信息和网络活动的可视化界面。这有助于网络管理员和用户更好地了解他们的网络环境。 工作原理 发现新主机时发送通知 监控主机在线/离线历史记录 保存网络中所有…

【多线程】CAS的原理及应用,看这篇文章就够啦

&#x1f490;个人主页&#xff1a;初晴~ &#x1f4da;相关专栏&#xff1a;多线程 / javaEE初阶 一、CAS概述 CAS&#xff08;Compare and Swap&#xff09;&#xff0c;中文译为 “比较并交换” &#xff0c;是一种无锁算法中常用的原子操作。CAS通常用于实现线程之间的同…

深度学习-从零基础快速入门到项目实践,这本书上市了!!!

此书地址&#xff1a; 《【2024新书】深度学习 从零基础快速入门到项目实践 文青山 跟我一起学人工智能 机器学习算法原理代码实现教程 深度学习项目分析 深度学习 从零基础快速入门到项目实践》【摘要 书评 试读】- 京东图书 除深度学习外我还写了一本软件测试书。我大概是国…

高效编程的利器 Jupyter Notebook

目录 前言1. Jupyter Notebook简介1.1 功能特点1.2 使用场景 2. 不同编程工具的对比与效率提升2.1 VS Code&#xff1a;灵活且轻量的代码编辑器2.2 PyCharm&#xff1a;面向专业开发者的集成开发环境2.3 Git&#xff1a;高效协作的版本控制工具2.4 Jupyter Notebook 和 VS Code…

idea中.git文件夹存在但是没有git功能列表

1.问题&#xff1a; 该项目中已经将.git文件夹置入了&#xff0c;但是idea中却没有git相关的功能列表&#xff0c;如图&#xff1a; 2.解决办法&#xff1a; 在【文件】-【设置】-【版本控制】-【目录映射】中添加目录映射应用就好了 &#xff08;【File】 -> 【S…

使用 Elasticsearch Reindex API 迁移数据

使用 Elasticsearch Reindex API 迁移数据 在 Elasticsearch 中&#xff0c;随着需求的变化&#xff0c;可能需要对索引进行重建或更新。这通常涉及创建新索引、迁移数据等步骤。本文介绍如何使用 Reindex API 将旧索引中的数据迁移到新索引中 一、步骤概述 创建新索引&#…

LEAN 赋型唯一性(Unique Typing)之 并行 κ 简化 (Parallel κ reduction)>>ₖ

基于 κ 简化 &#xff08;κ reduction&#xff09; 的概念&#xff0c;引入了并行简化&#xff08;Parallel Reduction&#xff09;的概念&#xff0c;记 >>&#xff0c;而 并行K简化&#xff08;Parallel K Reduction&#xff09;记为 >>ₖ 。直观的意思是&…