#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <signal.h>
void signal_hander()
{//处理子进程退出信号
int child_status;
wait(&child_status);
printf("child exited.\n");
}
int main(int argc,char **argv)
{//进程
pid_t pid;
int child_status;
signal(SIGCHLD,signal_hander);
if ((pid=fork())==0){
printf("child process run!\n");
exit(0);
}else{
printf("parent process run!\n");
sleep(10);
}
exit(0);
}
deepfuture-lx@deepfuture-lx-desktop:/media/LX/deepfuture$ gcc -o test10 test10.ctest10.c: In function ‘main’:
test10.c:20: warning: incompatible implicit declaration of built-in function ‘exit’
test10.c:26: warning: incompatible implicit declaration of built-in function ‘exit’
deepfuture-lx@deepfuture-lx-desktop:/media/LX/deepfuture$ ./test1
0parent process run!
child process run!
child exited.
分享到:
相关推荐
6. **线程管理**:Linux中的线程是轻量级进程,`pthread_create()`创建线程,`pthread_join()`等待线程结束,`pthread_exit()`退出线程,`pthread_cancel()`取消线程。`pthread_mutex_*()`和`pthread_rwlock_*()`等...
### Linux下C语言编程——信号处理函数 #### 一、信号的基本概念与产生 在Linux系统中,**信号**是一种轻量级的进程间通信机制,用于通知接收进程某个特定事件的发生。它不仅可以由硬件异常(如除零错误)触发,也...
- **等待子进程退出(回收子进程)** - `wait()`函数:等待任意子进程结束并回收其资源,返回子进程的PID。 - `waitpid()`函数:更灵活,可以指定等待特定的子进程或一组子进程结束。 3. **线程** - 线程是进程中...
- `SIGQUIT`:退出信号,由用户按下`Ctrl+\`产生。 - `SIGILL`:非法指令信号,指示进程尝试执行非法指令。 - `SIGSEGV`:段错误信号,通常表示访问内存时出现问题。 - `SIGALRM`:定时器信号,由`alarm`函数设定的...
### Linux-C编程重要知识点概述 ...以上总结了Linux-C编程的关键知识点,包括基础的编译、调试技巧,到高级的进程管理、网络编程等内容,涵盖了从初学者到高级开发者的广泛需求。希望对学习Linux-C编程有所帮助。
当子进程退出时,父进程可以通过`waitpid()`获取子进程的退出状态,并可以根据需要决定是否再次调用`fork()`启动新的子进程。这种模式常用于实现进程循环,比如守护进程需要持续地创建和重启执行特定任务的子进程。 ...
当子进程退出时,操作系统可能会向父进程发送一个SIGCHLD信号,通知它子进程的状态发生了变化。但默认情况下,收到SIGCHLD信号并不会自动导致父进程做任何处理,需要父进程自己捕获并处理这个信号。 **waitpid函数*...
信号有多种类型,如SIGINT(中断信号,通常由Ctrl+C触发),SIGTERM(终止信号,温和地请求进程结束),SIGKILL(杀死信号,强制无条件终止进程),SIGSEGV(段错误,表示进程试图访问无效内存地址),SIGALRM(闹钟...
在Linux操作系统中,使用C语言编写程序来杀死指定名称的进程是一项常见的任务,这涉及到对系统调用和进程管理的理解。下面将详细讲解这个过程涉及的知识点。 首先,我们需要了解Linux中的进程标识符(PID)。每个...
本文主要讨论了Linux进程退出的两种基本方式:正常退出和异常退出,并深入解析了不同退出方法之间的区别。 1. 正常退出: - 在`main()`函数中执行`return`:这是程序正常完成其任务并返回一个退出状态码的方式。 ...
反之,父进程退出时,子进程会成为孤儿进程,被系统init进程接管。 总的来说,Linux下的进程编程涉及到进程的概念、创建、管理和信号处理等多个方面,掌握这些知识对于进行系统级编程和理解操作系统的工作原理至关...
在 Linux 中,进程的管理和同步是通过系统调用和信号机制来实现的。wait() 函数和 waitpid() 函数可以用于父进程等待子进程的退出,而 exit() 函数和 _exit() 函数可以用于进程的退出。在进程同步中,信号机制可以...
9. **信号处理**:C语言中的`signal`函数允许程序响应特定的系统事件,如中断(SIGINT)、退出(SIGTERM)等。 10. **内存管理**:C语言提供了`malloc`、`calloc`、`realloc`和`free`等函数进行动态内存分配和释放...
在Linux环境中进行高级编程,了解进程环境、进程控制和进程关系是至关重要的。这些概念构成了操作系统的核心部分,允许程序在多任务系统中并发执行。以下是对这些主题的详细阐述: **进程状态转换图** 进程的状态...
1. **脱离控制终端**:通过调用`fork()`函数创建子进程,使父进程退出,这样子进程就不再关联任何终端。 2. **改变工作目录**:将工作目录更改为根目录`/`,防止占用某个用户的家目录。 3. **关闭标准输入、输出和...
在实现过程中,我们需要注意错误处理和资源释放,例如,当进程退出时,必须正确地解除共享内存的连接,以防止内存泄漏。另外,为了保证系统的稳定性,需要考虑并发访问和同步问题,可以使用互斥锁(mutex)或者信号...
常见的信号包括SIGINT(中断,通常由Ctrl+C产生)、SIGHUP(挂断)、SIGQUIT(退出请求)、SIGKILL(强制杀死进程)和SIGTERM(请求终止进程)等。更多信号类型可以查阅相关文档或头文件。 处理信号的函数主要有两...
6. **信号处理**:Shell需要处理各种信号,如`SIGINT`(Ctrl+C)用于中断当前命令,`SIGHUP`(挂断信号)用于退出Shell。通过`signal()`或`sigaction()`函数可以注册信号处理器。 7. **循环执行**:Shell是一个循环...