现在的位置: 首页 > 综合 > 正文

LinuxC之进程

2013年08月15日 ⁄ 综合 ⁄ 共 1117字 ⁄ 字号 评论关闭

通常来说,程序是一个包含可执行代码的文件,是一个可执行的文件。

进程是一个可以执行而还没有结束的程序的实例,是可执行文件的具体实现。

为了区分各个进程,系统给每一个进程分配来一个ID以便识别。

为了充分利用资源,系统给进程区分了不同的状态。新建,运行,阻塞,就绪,完成。

通过系统调用getuid()可获取进程的所有者ID,由于进程要用到一些资源,而Linux对系统资源是进行保护的,为了获取一定资源,进程还有一个有效用户ID;

跟着书上敲了一个例子:

#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;

    /*pid*/
    my_pid = getpid();
    parent_pid = getppid();

    /*uid*/
    my_uid = getuid();
    my_euid = geteuid();

    /*gid*/
    my_gid = getgid();
    my_egid = getegid();

    /* passwd --info */
    my_info = getpwuid(getuid());

    /*Output*/
    printf("Process ID: %ld\n" ,my_pid);
    printf("Parent ID: %ld\n" ,parent_pid);
    printf("User ID: %ld\n" ,my_uid);
    printf("Efective 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 0 ;
}

抱歉!评论已关闭.