- 论坛徽章:
- 0
|
大家好,小弟刚刚学习信号相关的知识,看到abort()的时候试着写了下面代码想自己调试一下,
但是打印的结果我有点不明白,还请各位指点一下。
- #include <signal.h>
- #include <stdio.h>
- #include <stdlib.h>
- static void
- signal_handler( int signo )
- {
- if( signo == SIGABRT ){
- printf( "Child process is terminated by abort().\n" );
- }
-
- return ;
- }
- int
- main(int argc, char *argv[])
- {
- int i = 0, status;
- pid_t pid;
-
- printf( "Process begins running...\n" );
-
- if( ( pid==fork() ) == 0 ){
- signal( SIGABRT, signal_handler );
- while( 1 ){
- printf( "i = %d\n", i++ );
- sleep( 1 );
- if( i == 5 ) abort();
- }
- } else if( pid > 0 ){
- wait( &status );
- if( WIFSIGNALED(status) ){
- printf( "Child process is terminated by signal[%d]\n", WTERMSIG(status) );
- }
- }
-
- return 0;
- }
复制代码
打印结果如下,用GCC编译的:
Process begins running...
i = 0
i = 0
i = 1
i = 1
i = 2
i = 2
i = 3
i = 3
i = 4
i = 4
Child process is terminated by abort().
Child process is terminated by abort().
已放弃
我不明白为什么每个内容都打印了两遍呢?还请各位多指点一下。 谢谢! |
|