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);
}
分享到:
相关推荐
总的来说,armlinux平台上的IIS音频驱动程序涉及到音频硬件的初始化、数据缓冲区的管理和DMA传输,以及与用户空间交互的接口。通过理解这些核心概念,开发者可以有效地调试和定制音频驱动,以满足特定硬件和应用需求...
以上是对《Linux_C编程一站式学习》的部分内容进行的详细总结,涵盖了从C语言基础到高级主题的广泛内容。这些知识点为读者提供了全面而深入的学习资源,有助于读者系统地掌握C语言及其在Linux环境下的应用。
【嵌入式Linux笔记】是一份详尽的Linux学习资料,涵盖了从基础概念到实际操作的多个方面。这篇笔记特别适合Linux初学者作为入门指南。笔记主要知识点包括: 1. **Linux硬盘分区**:Linux硬盘分区有主分区、扩展分区...
### Linux网络编程笔记(修订版) #### 基本概念 ...通过以上内容的学习和实践,可以更加深入地理解Linux网络编程的基本概念、常用接口以及常见的服务器模型,并能够编写出稳定高效的网络应用程序。
- **程序与进程**:探讨进程的概念、进程的生命周期、进程的状态变化以及进程间的父子关系。 - **程序线程**:介绍线程的基本概念、线程与进程的区别、线程的创建与管理。 - **异步、并发、通信**:讲解异步处理机制...
《LINUX与UNIX SHELL编程指南》是一本深入讲解Linux和UNIX Shell编程的经典书籍,作者张启峰在读书笔记中不仅归纳总结了书中的核心概念,还提供了丰富的实践示例,旨在帮助读者全面掌握Shell编程技能。以下是根据...
### Linux中的消息队列学习笔记 #### 消息队列概念 消息队列是一种进程间通信方式,允许发送包含一定格式的数据消息。消息队列中的消息由消息类型和消息文本组成,消息类型是一个整数值,它用于区分不同类型的事件...
这份Linux API速查手册涵盖了以上所有内容,无论你是初学者还是经验丰富的开发者,都可以从中快速查找和学习相关知识,提升你的Linux编程技能。通过深入阅读和实践,你将能够更好地理解和驾驭Linux环境下的应用程序...
- `expect lib for c编程学习记录.txt`:这个文件很可能是对LibExpect C语言接口的详细学习笔记,包括实例代码和使用经验分享,对于深入理解LibExpect的API和编程技巧会有很大帮助。 在实践中,掌握LibExpect的...
标题 "TIL:我想记住的一些小东西" 暗示这是一个关于个人学习记录或技术笔记的集合,其中可能包含了各种编程语言和相关工具的小知识点。描述中的“瓷砖”可能指的是某种编程概念或项目组织方式,而“编译器标志”...