`

linux c学习笔记----进程的概念与标志

阅读更多

1.进程的概念

 

(1)通俗的讲程序是一个包含可以执行代码的文件,是一个静态的文件.而进程是一个开始执行但是还没有结束的程序的实例.就是可执行文件的具体实现. 一个程序可能有许多进程,而每一个进程又可以有许多子进程.依次循环

下去,而产生子孙进程。

(2)当程序被系统调用到内存以后,系统会给程序分配一定的资源(内存,设备等等)然后进行一系列的复杂操作,使程序变成进程以供系统调用.在系统里面只有进程没有程序,为了区分各个不同的进程,系统给每一个进程分配了一个ID(就象我们的

身份证)以便识别。

(3)为了充分的利用资源,系统还对进程区分了不同的状态.将进程分为新建,运行,阻塞,就绪和完成五个状态. 新建表示进程正在被创建,运行是进程正在运行,阻塞是进程正在等待某一个事件发生,就绪是表示系统正在等待CPU 来执行命令,而完成表示

进程已经结束了系统正在回收资源.

 

2.进程的标志

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

git_t getegid(void) 得到有效组ID


调用getpwuid来得到用户的其他信息:


struct passwd {

char *pw_name; /* 登录名称 */

char *pw_passwd; /* 登录口令 */

uid_t pw_uid; /* 用户ID */

gid_t pw_gid; /* 用户组ID */

char *pw_gecos; /* 用户的真名 */

char *pw_dir; /* 用户的目录 */

char *pw_shell; /* 用户的SHELL */

};

实例代码:

 

/* 
 * File:   unistd.c
 * Author: RobertLuo
 *
 * Created on 2012年10月22日, 下午2:22
 */

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <pwd.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);
    return (EXIT_SUCCESS);
}
 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics