1.进程的属性
pid
基本属性pid(进程标识符)和ppid
pid_t
getpid()
pid_t
getppid()
举例:
2. 信用状(安全机制)
etc/passwd、etc/group
int
setgroups(size_t num, const gid_t *list)
int
getgroups(size_t num, gid_t *list)
3.setuid/setgid和系统守护进程
什么是守护进程?
总在系统中运行,来等待事情的发生或者完成相应的任务。
real
uid、saved uid、effective uid
int
setreuid(uid_t ruid, uid_t euid)
int
setuid(uid_t euid)
4.uid和gid总结
出错返回-1,正确返回0
在大部分函数原型在unistd.h中定义
int
setreuid(uid_t ruid, uid_t euid)
int
setregid(gid_t ruid, gid_t euid)
int
setuid(uid_t euid)
int
setgid(gid_t gid)
int
seteuid(uid_t gid)
int setegid(gid_t gid)
int
setgroups(size_t num, const gid_t *list)函数原型在grp.h中
uid_t
getuid()
uid_t
geteuid()
gid_t
getgid()
gid_t
getegid()
size_t
getgroups(size_t size, gid_t list[])
函数原形在grp.h中
进程相关信息
程序参数
int
main(int argc, char *argv[])
extern
char * environ[]
const
char * getenv(const char *name)
int
putenv(const char * string)
int
setenv(const char*name, const char *value, int overwrite)
例如:
putenv(“PATH=/bin;/usr/bin”)
setenv(“PATH“,“/bin:/usr/bin“,1)
资源使用:
int
getrusage(int who, struct rusage *usage)
who—RUSAGE_SELF、RUSAGE_CHILDREN、RUSAGE_BOTH
#include
<sys/resource.h>
struct
rusage{
struct
timeval ru_utime;
struct
timeval ru_stime;
long
int ru_minflt;
long
int ru_majflt;
long
int ru_nswap;
……
}
建立使用限制
int getrlimit(int resource, struct rlimit
*rlim)
Int setrlimit(int resource, const struct
rlimit *rlim)
struct rlimit{
long int rlim_cur;//软限制
long
int rlim_max;//硬限制
}
RLIMIT_AS
RLIMIT_COURE
RLIMIT_CPU
RLIMIT_DATA
RLIMIT_FSIZE
RLIMIT_MEMLOCK
RLIMIT_NOFILE
RLIMIT_NPROC
RLIMIT_RSS
RLIMIT_STACK
进程的基本元素
创建子进程
#include
<unistd.h>
pid_t
fork();
特别之处:返回两次,父进程一次,子进程一次。返回次序不定。
举例:
等待子进程结束
pid_t
wait4(pid_t pid, int *status, int options, struct rusage *rusage);
WIFEXITED(status) WEXITSTATUS(status)
WIFSIGNALED(status) WTERMSIG(status)
WIFSTOPPED(status) WSTOPSIG(status)
pid_t
wait(int *status)
pid_t
waitpid(pid_t pid, int *status, int options)
pid_t
wait3(int *status, int options, struct rusage *rusage)
运行新进程
int
execl(const char *path, const char *arg0,…)
//execl(“/bin/cat”,”/bin/cat”,”/etc/passwd”,”/etc/group”,NULL)最后参数必须为 NULL
int
execlp(const char *path, const char *arg0,…)
int
execle(const char *path, const char *arg0,…)
int
execlv(const char *path, const char **argv)
int
execlvp(const char *path, const char **argv)
int
execlve(const char *path, const char *arg0,…)//系统调用的函数
运行成功没有返回;失败返回-1
终止
void
exit(int exitcode)
void
_exit(int exitcode)
int
kill (pid_t pid, int signum)
简单子进程
system()
int
system(const char *cmd)
/bin/sh
示例:
从进程读或写popen()
FILE
*popen(const char *cmd, const char* mode)
int
pclose(FILE* stream)
会话和进程组
会话
控制终端
进程组
孤儿进程组