通常来说,程序是一个包含可执行代码的文件,是一个可执行的文件。
进程是一个可以执行而还没有结束的程序的实例,是可执行文件的具体实现。
为了区分各个进程,系统给每一个进程分配来一个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 ; }