进程分为新建,运行,阻塞,就绪和完成五个状态.每个进程都有一个ID,想要得到进程的ID,使用getpid可以得到进程的ID,而getppid可以得到父进程(也就是创建当前进程的进程)的ID.
#include
;
pid_t getpid(void);
pid_t getppid(void);
进程是为程序服务的,而程序是为了用户服务的.系统为了找到进程的用户名,还为进程和用户建立联系.这个用户称为进程的所有者.相应的每一个用户也有一个用户ID.通过系统调用getuid 可以得到进程的所有者的ID.由于进程要用到一些资源,而Linux 对系统资源是进行保护的,为了获取一定资源进程还有一个有效用户ID.这个ID 和系统的资源使用有关,涉及到进程的权限. 通过系统调geteuid 我们可以得到进程的有效用户ID. 和用户ID相对应进程还有一个组ID 和有效组ID 系统调用getgid 和getegid 可以分别得到组ID 和有效组ID
#include ;
#include ;
uid_t getuid(void);
uid_t geteuid(void);
gid_t getgid(void);
git_t getegid(void);
有时候我们还会对用户的其他信息感兴趣(登录名等等),这个时候我们可以调用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 */
};
#include ;
#include ;
struct passwd *getpwuid(uid_t uid);
一个实例:
#include ;
#include ;
#include ;
#include ;
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);
}
}
阅读(1000) | 评论(0) | 转发(0) |