/* * 信号发送 */ #include <stdio.h> #include <stdlib.h> #include <signal.h> #include <sys/types.h> #include <sys/wait.h> #include <unistd.h> int main(void) { pid_t result; int ret; result = fork(); int newret; if(result < 0) { perror("创建子进程失败/n"); exit(1); }else if(result = 0)//子进程 { raise(SIGSTOP); /** * raise函数 * 发送信号给当前的进程 * int raise(int sig); * 成功返回0,失败返回-1 * 相当于kill函数,但只能发送信号给当前进程 * */ exit(0); }else { printf("子进程的进程号是:%d/n",result); if( (waitpid(result,NULL,WNOHANG)) == 0)//非阻塞式执行子进程 { if( (ret=kill(result,SIGKILL)) == 0) /** * kill函数 * int kill(pid_t pid, int sig); * 发送参数sig指定的信号给参数pid指定的进程. * 参数列表: * pid>0,将信号传给进程识别码为pid的进程 * pid=0,将信号传给和目前进程相同进程组的所有进程 * pid=-1,将信号广播传送给系统内的所有进程 * pid<-,将信号传给进程组识别码为pid绝对值的所有进程 * * 成功返回0,失败返回-1 * */ printf("用kill函数返回值是:%d,发出的SIGKILL信号结束的进程进程号是:%d/n",ret, result); else perror("kill函数结束子进程失败/n"); } } }