C语言结束进程的问题!!如果建议好,给100分!!!

来源:百度知道 编辑:UC知道 时间:2024/05/27 20:37:26
我的程序结构如下所示:
int main()
{
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <process.h>
#include <time.h>

volatile int flag;
volatile int num;

static void func( char *argv[], char *envp[])
{
num = spawnlp(P_WAIT,"C:\\test1.exe",(char *)0,NULL);
if(num == -1)
printf("runtime error!\n");
flag = 0;
}

int main()
{
flag = 1;
clock_t start;
start = clock();
HANDLE pidNew;
pidNew = (HANDLE)_beginthread(func,0,NULL);//新建进程去执行func()函数////////////
while(flag)
{
clock_t tempend = clock();
if((double)(tempend - start)/(double)CLOCKS_PER_SEC > (double)1)///////////////超过1秒没有结束,则终止其运行////////
{
/////////////////////////////////////////////////////////////////
TerminateThread(pidNew,1);///////////
//////////////////////////

??
你的程序新建了一个线程, 然后呢线程又打开了一个新的进程
这个时候你用结束线程的函数只能结束你直接创建的线程, 但是对进程无效。
也就是说一个人生了一个儿子,儿子又生了一个孙子,杀死了儿子不等于杀死孙子。
如果你用windows编程的话我不建议你使用 spawnlp 这个函数。
如果你用CreateProcess 会好控制一些
这个函数的说明在 http://support.microsoft.com/kb/175986/zh-cn
这个函数最后返回一个 LPROCESS_INFORMATION 结构,里面有孙子的句柄
然后如果想结束这个孙子就拿着那个句柄
用TerminateProcess就行了

得到test.exe的PID,然后对test.exe的PID结束。