Linux系统编程1.进程

本文详细介绍了Linux系统中的进程概念,包括进程的标识(PID、PPID)、进程的状态以及进程的创建,特别讲解了如何通过fork创建子进程和使用wait、waitpid系统调用来同步父子进程。此外,还探讨了守护进程的创建,阐述了后台运行程序的实现思路。
摘要由CSDN通过智能技术生成

1. 进程的概念

Linux操作系统是面向多用户的,在同一时间可以有许多用户向操作系统发出各种命令。在现代操作系统中,都有程序和进程的概念。

通俗的讲:程序是一个包含可以执行代码的文件,是一个静态的文件;而进程是一个开始执行但还没有结束的程序实例,就是可执行文件的具体实现。

一个程序可能有许多进程,而每一个进程又可以有许多的子进程,依次循环下去,而产生子孙进程。

当程序被系统调用到内存以后,系统会给程序分配一定的资源(内存,设备等等)然后进行一系列的复杂操作,使程序变成进程以供系统调用。在系统里面只有进程没有程序,为了区分各个不同的进程,系统给每一个进程分配了一个 ID(就象我们的身份证)以便识别。

为了充分的利用资源,系统还对进程区分了不同的状态:新建、运行、阻塞、就绪和完成一共五个状态。

新建:表示进程正在被创建。
运行:进程正在运行。
阻塞:进程在等待某个事件发生。
就绪:系统在等待CPU来执行命令。
完成:进程已经结束了系统正在回收资源。

2. 进程的标志

进程的ID(也叫PID),通过系统调用getpid可以得到进程的ID,而getppid可以得到父进程(创建调用该函数进程的进程)的ID。

#include <unistd>;
pid_t getpid(void);//获得进程ID
pid_t getppid(void);//获得父进程ID

进程 - >程序 - > 用户

进程是为程序服务的,而程序为用户服务,系统为了找到该进程的用户名,还为进程和用户建立联系。这个用户称为进程的所有者。相应的每一用户也有一个用户ID。通过系统调用getuid可以得到进程所有者的ID。由于进程要用到一些资源。而Linux对系统资源是进行保护的,为了获取一定资源进程还有一个有效用户ID,这个ID和系统的资源使用有关,涉及到进程的权限。通过系统调用geteuid得到进程的有效用户ID。

#include <unistd>;
#include <sys/types.h>;
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 */
};
#include <pwd.h>;
#include <sys/types.h>;
struct passwd *getpwuid(uid_t uid);

实例:

<
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值