Ajudaria a ver um pouco do seu código / saída. Aqui está o meu palpite sobre a causa raiz do seu problema.
Primeiro, o sinal 13 equivale a SIGPIPE, que neste caso parece indicar que o processo perl está tentando gravar em um pipe (ou seja, STDOUT / STDERR), mas nada está lá para lê-lo.
Eu testei um pouco e minha pergunta é: você está lidando com a saída do script dentro do programa C? Em meus testes, simplesmente o processamento da saída do script perl evitou o erro SIGPIPE.
Sinal 13 produzido:
fp = popen("/home/chuckx/perl-test/perl.pl","r");
status = pclose(fp);
Sinal 13 evitado:
fp = popen("/home/chuckx/perl-test/perl.pl","r");
do {} while (fgets(output,80,fp) != NULL);
status = pclose(fp);