原创 进程控制

2009-5-27 20:55 2077 5 5 分类: 软件与OS
rar
进程属性
一个进程由如下元素组成:
◆程序的当前上下文(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);
};


PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
5
关闭 站长推荐上一条 /3 下一条