Linux系统编程——进程控制(三)

版权声明:版权归博主所有,转载请注明 https://blog.csdn.net/qq_17808707/article/details/88180244

三 进程的特殊操作

1.获得进程ID

进程的ID种类如下:

  • PID:进程编号
  • UID:创建进程的用户信息
  • EUID:创建进程的用户对进程所属可执行文件的操作权限信息
  • GID:创建进程的用户所属组信息
  • EGID:标识进程目前所属用户组
  • PGID:标识进程组信息

获得进程的GID:

gid_t getgid(void);
gid_t getgid(void);

获得进程的PID:

pid_t getpid(void);
pid_t getppid(void);//获得父进程PID

获得进程的PGID:

pid_t getpgrp(void);
pid_t getpgid(pid_t pid);//获得指定进程的PGID

2.setuid和setgid系统调用

int setuid(uid_t uid);//设置进程UID
int setgid(gid_t gid);//设置进程GID

setuid()函数可修改发出调用进程的UID,参数uid为创建进程的用户信息。如果以普通用户的UID作为参数执行该调用,Linux内核将直接设置进程UID为参数uid信息。如果以根用户的UID作为参数,为保障系统的安全性,Linux内核将以进程表和u区中用户真实的标识号来设置进程UID。
setuid()函数执行成功时,返回值为0,否则返回-1。

3.setpgrp和setpgid系统调用

用于设置进程的PGID,一般形式为:

int setpgrp(void);
int setpgid(pid_t pid,pid_t pgid);

setpgrp()函数直接将进程的PGID设为与PID相同的数值。
setpgid()以其中参数修改PGID。参数pid为指定进程的PID,值为0时修改发出调用进程的PGID;参数pgid为指定的PGID信息,值为0时,修改所有PID与参数pid相等的进程,将这些进程的PGID值设为参数pgid值。若以普通用户权限发出此调用,而PGID原本为根用户组所有,那只有在指定进程与调用进程的EUID相同时,或者指定进程为调用进程的子进程时才有效。

4.chdir系统调用

将进程的当前工作目录改为由参数指定的目录。该调用的一般形式如下:

int chdir(const char* path);

参数path为指定目录的路径,发出该调用的进程必须具备该目录的执行权限。调用成功时返回0,否则返回-1,并设置相应的错误代码。

5.chroot系统调用

又被称为根交换操作,作用通常是在一个Linux系统上虚拟另一个Linux系统,根交换后,所有的命令操作都被重新定向。一般形式如下:

int chroot(const char* path);

参数path为新的根目录路径,执行后,进程将以该目录作为根目录,并且使进程不能访问该目录以外的内容。
该操作不改变当前工作目录,如果当前工作目录在指定目录以外,则无法访问其中的内容。
根交换操作只能由根用户发出,调用成功时返回值为0,错误时返回-1,并设置相应的错误代码。

6.nice系统调用

用来改变进程的优先级。一般形式如下:

int nice(int inc);

参数inc为调用nice()函数的进程优先级数值的增量。优先级数值越低的值,被调度上CPU运行的机会越大;优先级数值越高,被调度上CPU运行的机会越低。但是,只有根用户能为inc参数设置负值,使进程优先级提高,普通用户设置的正值会降低优先级。 当调用成功时,返回值为0,否则为-1。

猜你喜欢

转载自blog.csdn.net/qq_17808707/article/details/88180244