当前位置:  技术问答>linux和unix

fgets()报错问题(errno=4)

    来源: 互联网  发布时间:2016-02-19

    本文导语:      有一个获取进程个数的程序:     sprintf(Cmd, "ps -ef|grep %s|grep %s|wc -l", prog, entr);     fp = popen(Cmd, "r");     if(fp == NULL) {         printf("打开管道[%s]错n", Cmd);         return -1;     }     memset(buff, 0...


    有一个获取进程个数的程序:
    sprintf(Cmd, "ps -ef|grep %s|grep %s|wc -l", prog, entr);
    fp = popen(Cmd, "r");
    if(fp == NULL) {
        printf("打开管道[%s]错n", Cmd);
        return -1;
    }
    memset(buff, 0, sizeof(buff));
    if ( fgets(buff, 256, fp) == NULL ) {
        perror( "fgets:" );
        printf("fgets() error[%d][%ld]n",i, (long)getpid() );
        pclose( fp );
        return -1;
    }

    。。。。。。

    pclose(fp);

    正常运行是没有问题的。但是如果捕获了SIGCHLD信号后,重复执行以上程序,则会不定时在fgets()

时报错:Interrupted system call(errno==4)。

    完整的程序代码如下:

#include
#include
#include
#include
#include
#include
#include
#include

struct   sigaction sa_old;
struct   sigaction sa_new;

/*------------------------------------------------------------------------
Function Name : agt_chld_exit
Description   : 子进程结束信号处理
Input         :
                _sign 捕捉到的信号
Output        :
Return        : 
------------------------------------------------------------------------*/
void agt_chld_exit(int _sign)
{
    int    e = errno;
    int    stat = 0;
    pid_t  pid_tmp = 0;

    while((pid_tmp = waitpid(-1, &stat, WNOHANG)) > 0)
        printf("进程[%d]退出n", pid_tmp);

    errno = e;

    return;
}

int
main()
{

    int i=0;

    FILE  *fp = NULL;
    char  Cmd[1025];
    char  buff[1025];
    char  prog[81];
    char  entr[9];
    int   Cnt = 0;
    int   ret = -1;

    memset(&sa_old, 0, sizeof(sa_old));
    memset(&sa_new, 0, sizeof(sa_new));

    signal(SIGPIPE, SIG_IGN);

    if(setpgrp() 

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • fread 和 fgets的选择?
  • 关于fgets()的异常
  • fgets 和scanf 、 C库函数 分割屏幕 聊天室
  • 标准I/O函数fgets()的用法?//linux C编程
  • linux下fgets(..,..,stdin)不阻塞??
  • 多线程下fgets函数读取文件导致线程挂住


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3