我是C编程的新手,任何帮助都不胜感激。该代码将用于检查一个pid是否仍然有效。提供pid文件路径的参数通过命令行传递。请参阅下面的Valgrind和GDB错误以及代码。线程1中的堆栈溢出:无法将堆栈增长到0xffe601ff8 Valgrind错误
**Valgrind Error**
==6553== Memcheck, a memory error detector
==6553== Copyright (C) 2002-2013, and GNU GPL'd, by Julian Seward et al.
==6553== Using Valgrind-3.10.0 and LibVEX; rerun with -h for copyright info
==6553== Command: ./pid1108_2 /var/run/httpd/httpd.pid
==6553==
==6553== Stack overflow in thread 1: can't grow stack to 0xffe601ff8
==6553==
==6553== Process terminating with default action of signal 11 (SIGSEGV)
==6553== Access not within mapped region at address 0xFFE601FF8
==6553== at 0x40069F: kill (in /home/ehubbard/C_Checks/pid1108_2)
==6553== If you believe this happened as a result of a stack
==6553== overflow in your program's main thread (unlikely but
==6553== possible), you can try to increase the size of the
==6553== main thread stack using the --main-stacksize= flag.
==6553== The main thread stack size used in this run was 10485760.
==6553== Stack overflow in thread 1: can't grow stack to 0xffe601ff0
==6553==
==6553== Process terminating with default action of signal 11 (SIGSEGV)
==6553== Access not within mapped region at address 0xFFE601FF0
==6553== at 0x4801661: _vgnU_freeres (vg_preloaded.c:58)
==6553== If you believe this happened as a result of a stack
==6553== overflow in your program's main thread (unlikely but
==6553== possible), you can try to increase the size of the
==6553== main thread stack using the --main-stacksize= flag.
==6553== The main thread stack size used in this run was 10485760.
==6553==
==6553== HEAP SUMMARY:
==6553== in use at exit: 0 bytes in 0 blocks
==6553== total heap usage: 1 allocs, 1 frees, 568 bytes allocated
==6553==
==6553== All heap blocks were freed -- no leaks are possible
==6553==
==6553== For counts of detected and suppressed errors, rerun with: -v
==6553== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 4 from 4)
**GDB Error**
Program received signal SIGSEGV, Segmentation fault.
0x000000000040068f in kill()`enter code here`
#include <stdio.h> //Needed for standard I/O
#include <stdlib.h> //Needed for exit
#include <sys/types.h> //Needed for kill function
#include <signal.h> //Needed for kill function
#include <inttypes.h>
#include <iso646.h>
int kill(pid_t pid, int sig);
int main(int argc, char *argv[])
{
FILE *fp;
int pid;
fp = fopen(argv[1], "r");
if (fp == NULL){
printf("Pid file doesn't exist:");
return 2;}
else {
fscanf(fp, "%d", &pid);
printf("Pid number is %d", pid);
fclose(fp);
}
kill(pid, 0);
}
int kill(pid_t pid, int sig)
{
if ((kill (pid, sig)) == -1){
printf("Pid %d is no longer valid", pid);
return 2;
}
else if ((kill (pid, sig)) == 0){
printf("Pid %d is active.", pid);
return 0;
}
else{
printf("Could not determine value!");
return 2;
}
}
'kill()'继续使用相同的参数调用自己。 – Galik 2014-11-09 03:06:24