2016-08-01 104 views
2

有没有办法使用system()并要求代码等待几秒钟?输入命令与系统()和睡眠()

我一直在尝试这样的:

system("MyCmd"); 
sleep(8000); 

但是,sleep()终止 “MyCmd” 执行。

有什么想法?

+1

什么代码?那么sleep()如何终止执行呢?这可能是因为程序终止了,它终止了'MyCmd'。 – Rakete1111

回答

1

但是,sleep()会终止“MyCmd”执行。

号的sleep()表达不会终止与system()调用创建子进程,

system("MyCmd"); 
sleep(8000); 

将只是顺序执行的表达式。


你可以做的是调用fork()创建子进程,调用父进程sleep(),并kill()子进程,如果它的父进程后仍在运行醒悟:

pid_t pid = fork(); 

if (pid == 0) { 
    // child process 
    execl ("/bin/MyCmd", "MyCmd", (char *)0); 
} 
else if (pid > 0) { 
    // parent process 
    sleep(8000); 
    kill(pid,SIGKILL); 
} 
else { 
    // fork failed 
    printf("fork() failed!\n"); 
    return 1; 
} 
+0

或者你也可以使用线程(也可以在系统下,fork()不可用,例如Windows)。 – axalis

+0

@axalis如果你使用'std :: thread',你将不会有这种控制级别('kill()')。 –

+0

但是运行命令的线程可以被“杀死”(终止),或者?在Windows下的另一种可能性可能是CreateProcess,在那里你可以获得可以被杀死的新进程的句柄。 – axalis