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); }