进程属性
一个进程由如下元素组成:
◆程序的当前上下文(context),它是程序当前执行的状态
◆程序的当前执行目录
◆程序访问的文件和目录
◆程序的信任状态(credentials)或者是访问权限,比如它的文件模式和所有权。
◆内存和其他分配给进程的系统资源
进程的标识号
进程最知名的属性就是它的标识号(process ID, PID)和它的父进程号(parent process ID, PPID)。
Real和Effective标识号
创建进程
使用system函数
#include <stdlib.h>
int system(const char *string);
fork系统调用
fork调用创建一个新进程。新的进程或者说是子进程是调用进程或者说是父进程的副本。
#include <unistd.h>
pid_t fork(void)
exec函数族
#include <unistd.h>
int execl(const char *path, const char *arg, ...);
int execlp(const char *file, const char *arg, ...);
int execle(const char *path, char *const arg, char *const envp[]);
int execv(const char *path, char *const argv[])
int execve(const char *path, char *const argv[], char *const envp[]);
int execp(const char *file, char *const argv[]);
控制进程
等待进程——wait函数族
使用wait或waitpid调用可以收集子进程的退出状态,原型:
#include <sys/wait.h>
#include <sys/types.h>
pid_t wait(int *status);
pid_t waitpid(pid_t pid, int *status, int options);
杀死进程
使用kill函数,原型:
#include <signal.h>
#include <sys/types.h>
int kill(pid_t pid, int sig);
pid指定了要杀死的进程,而sig是要发送的信号。
定义一个信号处理器
可以使用下面5个函数创建、设置以及查询一个信号集合,都在<signal.h>中定义:
int sigemptyset(sigset_t *set);
int sigfillset(sigset_t *set);
int sigaddset(sigset_t *set, int signum);
int sigdelset(sigset_t *set, int signum);
int sigismember(const sigset_t *set, int signum);
登记一个信号处理器
sigprocmask的原型是:
#include <signal.h>
int sigprocmask(int how, const sigset_t *set, sigset_t *oldset);
◆SIG_BLOCK——set包含其他要阻塞的信号
◆SIG_UNBLOCK——set包含其他要接触阻塞的信号
◆SIG_SETMASK——set包含新的信号掩码
struct sigaction{
void (*sa_hundler)(int);
sigset_t sa_mask;
int sa_flags;
void (*sa_restorer)(void);
};
文章评论(0条评论)
登录后参与讨论