Linux C, 取得进程信息和用户信息

1. 基本知识

在Linux 是一个多用户多任务的操作系统。同时会有不同的用户,向操作系统发出各种命令。

命令通过程序执行。在执行的过程中,就会产生进程。这里我们讲程序和进程之间的关系,我们可以这样理解: 程序是一些以文件的形式存储在操作系统文件系统中,包含可执行代码的静态文件。这些文件在没有被运行的时候,和其他的Word、Excel文档没有本质的区别。

当程序被执行的时候,程序要被读入到内存中并且被执行。在执行的过程中,程序在内存中执行过程中的实例化的体现,就是进程。一个实例可能有很多个进程,每一个进程也可能有子进程。

在进程的执行过程中,操作系统会给进程分配一定的资源(内存,磁盘和设备等),为了区别不同的进程,系统会为不同进程分配唯一的ID进行识别。

系统内部对进程的管理包含以下的状态:

新建—— 进程正在被创建

运行—— 进程正在运行

阻塞—— 进程正在等待某个命令发生

就绪—— 进程正在等待CPU执行命令

完成—— 进程已经结束了,操作系统正在回收资源

2. 通过Shell开列系统进程

下面的Shell执行了3个命令,分别来解读。

(1) 【ps -f】命令列出当前用户的进程。 第一行bash,它的进程ID是28273,这个进程就是我们运行的Shell本身,【ps -f】 命令在这个Shell中执行,所以第二行ps -f的父进程ID就是第一行的进程ID,同时【ps -f】命令也具有自己的独立进程ID。

(2)  【bash】命令在当前Shell中,又创建了一个Shell进程

(3)  【ps -f】命令在这时候列出当前用户的进程时候,这时候可以发现在开始bash进程中,打开了一个bash进程,然后执行【ps -f】命令列出进程的过程。三个进程中,上边的一个进程都是下面一个进程的父进程。

3. Linux C获得当前程序进程及用户信息

/******************************************************
* Program Assignment : 输出进程ID和用户基本信息
* Author: Densin.Tian
* Date: 2015/05/02
* Description:
*****************************************************/

#include <unistd.h>
#include <pwd.h>
#include <sys/types.h>
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char **argv){
    pid_t my_pid, parent_pid;
    uid_t my_uid, parent_uid;
    gid_t my_gid, parent_gid;

    struct passwd *my_info;

    my_pid      = getpid();
    parent_pid  = getppid();
    my_uid      = getuid();
    parent_uid  = geteuid();
    my_gid      = getgid();
    parent_gid  = getegid();

    my_info     = getpwuid(my_uid);

    printf("===================================\n");
    printf("        Process Information        \n");
    printf("===================================\n");
    printf("Process ID : %ld\n", (long)my_pid);
    printf("Parent  ID : %ld\n", (long)parent_pid);
    printf("User    ID : %ld\n", (long)my_uid);
    printf("Effective User  ID : %ld\n", (long)parent_uid);
    printf("Group   ID : %ld\n", (long)my_gid);
    printf("Effective Group ID : %ld\n", (long)parent_gid);

    if(my_info){
        printf("===================================\n");
        printf("           User Information        \n");
        printf("===================================\n");
        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", (long)my_info->pw_uid);
        printf("My Group ID   : %ld\n", (long)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);
    }

	 return 0;
}
时间: 2024-10-03 14:14:59

Linux C, 取得进程信息和用户信息的相关文章

查看ip地址信息以及用户信息

RIR (Regional Internet Registry) 现全球有5大RIR机构 1.RIPE(Reseaux IP Europeans)欧洲IP地址注册中心--服务于欧洲.中东地区和中亚地区: 2.LACNIC(Lation American and Caribbean Internet Address Registry)拉丁美洲和加勒比海Internet地址注册中心--服务于中美.南美以及加勒比海地区: 3.ARIN(American Registry for Internet Nu

iOS 获取当前应用的信息以及用户信息:版本号手机号手机型号

NSDictionary *infoDictionary = [[NSBundle mainBundle] infoDictionary]; CFShow(infoDictionary); // app名称 NSString *app_Name = [infoDictionary objectForKey:@"CFBundleDisplayName"]; // app版本 NSString *app_Version = [infoDictionary objectForKey:@&qu

[Python爬虫] Selenium爬取新浪微博客户端用户信息、热点话题及评论 (上)

一. 文章介绍 前一篇文章"[python爬虫] Selenium爬取新浪微博内容及用户信息"简单讲述了如何爬取新浪微博手机端用户信息和微博信息. 用户信息:包括用户ID.用户名.微博数.粉丝数.关注数等. 微博信息:包括转发或原创.点赞数.转发数.评论数.发布时间.微博内容等. 它主要通过从文本txt中读取用户id,通过"URL+用户ID" 访问个人网站,如柳岩: http://weibo.cn/guangxianliuya 因为手机端数据相对精简简单,所以采用输

权限管理系统 用户信息 --MyRapid 快速开发框架 Winform

1.1.2 用户信息 用户信息对用户信息进行登记,对于权限管理来说,这里只有用户编号具有意义,权限系统根据用户编号进行用户识别绑定.其他信息,例如:权限.部门.帐号类型等是框架所需要用到的属性,并不涉及权限管理,权限管理只会根据用户的角色分配功能模块以及页面按钮.

php 微信开发获取用户信息如何实现

php 微信开发获取用户信息 获取用户信息的大致算法是 用户授权登录第三方网站, 重点:scope参数: snsapi_basic 静默登录,不需要用户授权,只能获取到openid: snsapi_userinfo ,需要用户点击授权,能获取到openid和所有用户信息: 第一步:先获取用户的code值: 第二步:根据code值去获取access_token,每次请求的值都不一样,如果没有使用,每五分钟更新一次: 第三步:根据access_token获取用户信息: 1.获取code代码实现: g

Django-admin自定义用户信息表

class UserProfile(auth.AbstractBaseUser, auth.PermissionsMixin): email = models.EmailField( verbose_name='email address', max_length=255, unique=True, ) is_active = models.BooleanField(default=True) # 是否是admin账户 is_admin = models.BooleanField(default

【转】linux下杀死进程

经过搜集和整理相关的Linux操作系统杀死进程的材料,在这里给大家推荐本篇文章,希望大家看后会有不少收获. 1. kill 作用:根据进程号杀死进程 用法: kill [信号代码] 进程ID 举例: 1.[[email protected] ~]# ps auxf |grep httpd 注意:kill -9 来强制终止退出 举例 1.[[email protected] ~]# ps aux |grep gaim 或者 1.[[email protected] ~]# pgrep -l gai

Linux程序接口实验:取进程标志及用户信息

0.环境平台 操作系统平台: Linux leaf 4.4.0-75-generic #96-Ubuntu SMP Thu Apr 20 09:56:33 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux 相关工具语言:vim,gcc,C语言 1.程序源代码 [email protected]:~/operation/1$ cat pflag.c  #include <unistd.h> #include <pwd.h> #include <sy

Linux下用于查看系统当前登录用户信息的4种方法

作为系统管理员,你可能经常会(在某个时候)需要查看系统中有哪些用户正在活动.有些时候,你甚至需要知道他(她)们正在做什么.本文为我们总结了4种查看系统用户信息(通过编号(ID))的方法. 1. 使用w命令查看登录用户正在使用的进程信息 w命令用于显示已经登录系统的用户的名称,以及他们正在做的事.该命令所使用的信息来源于/var/run/utmp文件.w命令输出的信息包括:?用户名称 ?用户的机器名称或tty号 ?远程主机地址 ?用户登录系统的时间 ?空闲时间(作用不大) ?附加到tty(终端)的