实验内容与步骤:
实验前期准备:(一些函数的说明)
getpid();getppid():
getpid 返回当前进程的进程号,getppid 返回当前进程父进程的进程号
signal():
sighandler_t signal(int signum, sighandler_t handler);
signum 要捕捉的信号; handler 进程中自定义的信号处理函数名;signal 调用成功会返回信号处理函数的返回值,不成功返回-1,并设置 系统变量 errno 为 SIG_ERR。
从程序中向一个进程发送信号有两种方法:调用 shell 的 kill 命令,调 用kill系统调用函数。kill能够发送除杀死一个进程(SIGKILL、SIGTERM、 SIGQUIT) 之外的其他信号,例如键盘中断(Ctrl+C)信号 SIGINT,进程暂停(Ctrl+Z)信号 SIGTSTP 等等。
fork():
创建子进程,fork 成功创建子进程后将返回子进程的进程号,不成功会返回-1。
pause():
pause 挂起调用它的进程直到有任何信号到达。
execve(const char *path, const char *argv[], const char * envp[]):
path 要装入的新的执行文件的绝对路径名字符串.;argv[] 要传递给新执行程序的完整的命令参数列表(可以为空);envp[] 要传递给新执行程序的完整的环境变量参数列表(可以为空)。
Exec 执行成功后将用一个新的程序代替原进程,但进程号不变,它绝不会再 返回到调用进程了。如果 exec 调用失败,它会返回-1。
waitpid(pid_t pid,int *status,int option):
status 用于保留子进程的退出状态
pid 可以为以下可能值:
-1 等待所有 PGID 等于 PID 的绝对值的子进程
1 等待所有子进程 0 等待所有 PGID 等于调用进程的子进程
>0 等待 PID 等于 pid 的子进程
option 规定了调用 waitpid 进程的行为: WNOHANG 没有子进程时立即返回 WUNTRACED 没有报告状态的进程时返回 wait 和 waitpi