进程:一般我们所说的进程就是指当前正在执行的程序
在linux系统下我们可以使用ps命令去查看当前系统下所运行的所有的进程
这个命令会带有很多参数,其中最常用的就是-a、-u、-x;
-a是显示当前终端的所的进程
-x显示当前后台进程运行的参数
-u以用户的格式显示进程信息
以上是一些Linux中如何去查看进程的命令的介绍。
在linux的C语言学习中进程间的通信是我们必须要掌握的。下面就说一下linux系统下一些关于进程的一些头文件:
这个是unistd头中我们经常会用到的两个得到进程ID的函数:
#include <unistd>;
pid_t getpid(void);得到当前近进程的ID
pid_t getppid(void);得到当前进程的父ID
下面四个函数是获取一些用户ID组ID等一些信息:
#include <unistd>;
#include <sys/types.h>;
uid_t getuid(void);得到当前进程所有者用户的ID
uid_t geteuid(void);进程的有效用户ID
gid_t getgid(void);getgid得到组 ID
git_t getegid(void);getegid可以有效组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);
上面所说的是我们得到进程信息,下面来说一下我们如何创建进程以及对进城做一些基本的操作。
#include <unistd.h>;
pid_t fork(); 用来创建进程
当 fork 调用失败的时候(内存不足或者是用户的最大进程数已到)fork 返回-1,否则 f
ork 的返回值有重要的作用.对于父进程 fork 返回子进程的 ID,而对于 fork 子进程返回 0
#include <sys/types.h>;
#include <sys/wait.h>;
pid_t wait(int *stat_loc);
wait 系统调用会使父进程阻塞直到一个子进程结束或者是父进程接受到了一个信号.如果
没有父进程没有子进程或者他的子进程已经结束了 wait 回立即返回.成功时(因一个子进
程结束)wait 将返回子进程的 ID,否则返回-1,并设置全局变量 errno.stat_loc 是子进程的
退出状态.子进程调用 exit,_exit 或者是 return 来设置这个值. 为了得到这个值 Linux 定
义了几个宏来测试这个返回值.
WIFEXITED:判断子进程退出值是非 0
WEXITSTATUS:判断子进程的退出值(当子进程退出时非 0).
WIFSIGNALED:子进程由于有没有获得的信号而退出.
WTERMSIG:子进程没有获得的信号号(在 WIFSIGNALED 为真时才有意义).
pid_t waitpid(pid_t pid,int *stat_loc,int options);
waitpid 等待指定的子进程直到子进程返回.如果 pid 为正值则等待指定的进程(pid).如果
为 0 则等待任何一个组 ID 和调用者的组 ID 相同的进程.为-1 时等同于 wait 调用.小于-1 时等
待任何一个组 ID 等于 pid 绝对值的进程. stat_loc 和 wait 的意义一样. options 可以决定
父进程的状态.可以取两个值 WNOHANG:父进程立即返回当没有子进程存在时.
WUNTACHED:当子进程结束时 waitpid 返回,但是子进程的退出状态不可得到
#include <unistd.h>;
int execl(const char *path,const char *arg,...);
int execlp(const char *file,const char *arg,...);
int execle(const char *path,const char *arg,...);
int execv(const char *path,char *const argv[]);
int execvp(const char *file,char *const argv[]):
exec 族调用可以执行给定程序.