Linux进程标识

1.   进程标识

(1) 进程标识说明

每个进程都有一个非负整型的唯一进程ID。因为进程ID标识符总是唯一的,常将其用作其他标识符的一部分以保证其唯一性。

Linux中,进程ID 0是调度进程,常常被称为交换进程。该进程并不执行任何磁盘上的程序—它是内核的一部分,因此也被称为系统进程。进程ID 1通常是init进程,在自举过程结束时由内核调用。

init通常读与系统有关的初始化文件(/etc/rc*文件),并将系统引导到一个状态 (例如多用户 )init进程决不会终止,它是一个普通的用户进程 (与交换进程不同,它不是内核中的系统进程 ),但是它以超级用户特权态运行,init进程是所有孤儿进程的父进程。

Linux 中最主要的进程标识有进程号(PIDProcess Idenity Number)和它的父进程号(PPIDparent process ID, 其中 PID 唯一地标识一个进程,PID PPID 都是非零的正整数。

 

(2) 进程标识相关函数原型

头文件

#include <sys/types.h>

#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

struct passwd * getpwuid(uid_t uid)

用来逐一搜索参数uid 指定的用户识别码,找到时便将该用户的信息以passwd结构返回

 

(3) 进程标识函数使用实例

pid.c源代码如下

#include <unistd.h>

#include <pwd.h>

#include <sys/types.h>

#include <stdio.h>

int main(int argc,char **argv)

{

    pid_t my_pid,parent_pid;

    uid_t my_uid,my_euid;

    gid_t my_gid,my_egid;

    struct passwd *my_info;

    my_pid=getpid();

    parent_pid=getppid();

    my_uid=getuid();

    my_euid=geteuid();

    my_gid=getgid();

    my_egid=getegid();

    my_info=getpwuid(my_uid);

    printf("Process ID%ld/n",my_pid);

    printf("Parent ID%ld/n",parent_pid);

    printf("User ID%ld/n",my_uid);

    printf("Effective User ID%ld/n",my_euid);

    printf("Group ID%ld/n",my_gid);

    printf("Effective Group ID%ld/n",my_egid)  ;

        if(my_info)

        {

            printf("My Login Name%s/n" ,my_info->pw_name);

            printf("My Password %s/n" ,my_info->pw_passwd);

            printf("My User ID %ld/n",my_info->pw_uid);

            printf("My Group ID %ld/n",my_info->pw_gid);

            printf("My Real Name %s/n" ,my_info->pw_gecos);

            printf("My Home Dir %s/n", my_info->pw_dir);

            printf("My Work Shell%s/n", my_info->pw_shell);

        }

}

编译 gcc pid.c –o pid

执行 ./pid,执行结果如下:

Process ID6492

Parent ID5707

User ID1008

Effective User ID1008

Group ID1003

Effective Group ID1003

My Login Name zjkf

My Password x

My User ID 1008

My Group ID 1003

My Real Name zjkf,,,,

My Home Dir /home/zjkf

My Work Shell/bin/bash

 


摘录自《深入浅出Linux工具与编程》

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值