linux进程创建.doc
Linux 进程创建详解 本文将详细介绍 Linux 下 C 语言编程中进程的创建,包括进程的概念、进程的标志、进程的状态、进程的所有者和进程的资源分配等内容。 一、进程的概念 在 Linux 操作系统中,进程是指一个正在执行的程序实例。一个程序可能有多个进程,而每个进程又可以有多个子进程。进程是系统为了实现多用户环境而采用的机制。当程序被系统调用到内存以后,系统会给程序分配一定的资源(内存、设备等),然后进行一系列的复杂操作,使程序变成进程以供系统调用。在系统里面只有进程,没有程序,为了区分各个不同的进程,系统给每一个进程分配了一个 ID,以便识别。 二、进程的状态 系统对进程区分了不同的状态,包括新建、运行、阻塞、就绪和完成五个状态。新建表示进程正在被创建,运行是进程正在运行,阻塞是进程正在等待某一个事件发生, 就绪是表示系统正在等待 CPU 来执行命令,而完成表示进程已经结束了系统正在回收资源。 三、进程的标志 每个进程都有一个 ID,系统调用 getpid 可以得到进程的 ID,而 getppid 可以得到父进程(创建调用该函数进程的进程)的 ID。进程是为程序服务的,而程序是为了用户服务的。系统为了找到进程的用户名,还为进程和用户建立联系。这个用户称为进程的所有者。相应的,每一个用户也有一个用户 ID。通过系统调用 getuid 可以得到进程的所有者的 ID。 四、进程的所有者和资源分配 由于进程要用到一些资源,而 Linux 对系统资源是进行保护的,为了获取一定资源进程还有一个有效用户 ID。这个 ID 和系统的资源使用有关,涉及到进程的权限。通过系统调用 geteuid 我们可以得到进程的有效用户 ID。和用户 ID 相对应进程还有一个组 ID 和有效组 ID 系统调用 getgid 和 getegid 可以分别得到组 ID 和有效组 ID。有时候我们还会对用户的其他信息感兴趣(登录名等等),这个时候我们可以调用 getpwuid 来得到。 五、实践实例 下面是一个实践实例,演示了如何使用 getpid、getppid、getuid、geteuid、getgid、getegid 和 getpwuid 函数来获取进程的 ID、父进程的 ID、用户 ID、有效用户 ID、组 ID 和有效组 ID,以及获取用户的其他信息。 ```c #include <stdio.h> #include <sys/types.h> #include <unistd.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 UserID:%ld\n", my_euid); printf("Group ID:%ld\n", my_gid); printf("Effective Group ID:%ld\n", my_egid); printf("Username:%s\n", my_info->pw_name); return 0; } ``` 这篇文章详细介绍了 Linux 下 C 语言编程中进程的创建,包括进程的概念、进程的状态、进程的标志、进程的所有者和进程的资源分配等内容,并提供了一个实践实例来演示如何使用相关函数来获取进程的信息。