‘壹’ c语言 创建子进程,调用外部exe,如果这个exe运行超过一定时间(比如是死循环),就停止这个进程
CreateProcess调用来创建子进程
然后在CreateProcess通过最后一个参数返回的进程句柄上调用WaitForSingleObject,超时时间自己设定。
之后检查WaitForSingleObject,基本上可以认为有两种可能,一个是返回了WAIT_OBJECT_0,代表进程正常结束;一个是返回了WAIT_TIMEOUT,代表进程运行超过了一定时间,此时在刚才说的句柄上调用TerminateProcess强制终止进程。
‘贰’ C语言创建进程
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<sys/wait.h>
intmain()
{
for(intj=0;j<5;++j){
intpid=fork();
if(pid==0){//child
printf("j:%d,pid:%d. ",j,getpid());
exit(0);
}elseif(pid<0){//error
exit(-1);
}
}
for(inti=0;i<5;++i){
wait(NULL);
}
printf("End! ");
return0;
}
‘叁’ C语言中怎么用fork()创建子进程运行程序并且计算时间
1、fork一般用于处理多线程任务。比如在网络中,需要同时发送多种请求报文,则可以fork出子进程来进行发包任务,而父进程则直接去做自己的逻辑任务。
2、所谓运行时间指的是已经运行了多长时间还是从进程创建到进程退出的时间?输入的程序是由程序启动还是已经在运行的 ,如果是已经存在的,就试着去获取进程创建时间(WIN32 提供这样的API),然后获取当前时间,就可以得到进程已经运行了多久。如果是程序启动的,那就用类似time这种函数打桩就可以了。
‘肆’ c语言中创建子进程运行外部程序
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main()
{
int pid1, pid2, pid3, pid4, pid5, pid6;
pid1 = getpid();
printf("PID = %d\n", pid1);
pid2 = fork();
if (pid2 == 0)
{
printf("PID = %d, Parent PID = %d\n", getpid(), getppid());
sleep(30);
exit(0);
}
pid3 = fork();
if (pid3 == 0)
{
printf("PID = %d, Parent PID = %d\n", getpid(), getppid());
pid5 = fork();
if (pid5 == 0)
{
printf("PID = %d, Parent PID = %d\n", getpid(), getppid());
pid6 = fork();
if (pid6 == 0)
{
printf("PID = %d, Parent PID = %d\n", getpid(), getppid());
sleep(30);
exit(0);
}
sleep(30);
exit(0);
}
sleep(30);
exit(0);
}
pid4 = fork();
if (pid4 == 0)
{
printf("PID = %d, Parent PID = %d\n", getpid(), getppid());
sleep(30);
exit(0);
}
sleep(30);
return 0;
}
每一个进程都会在退出前 sleep 30秒,从而保证能够用 ps 看到,
编译 gcc testpid.c -o testpid
然后执行,可以看到
PID = 24913
PID = 24914, Parent PID = 24913
PID = 24916, Parent PID = 24913
PID = 24915, Parent PID = 24913
PID = 24917, Parent PID = 24915
PID = 24918, Parent PID = 24917
ps -ef 的结果
24913 24582 0 11:29 pts/19 00:00:00 ./testpid
24914 24913 0 11:29 pts/19 00:00:00 ./testpid
24915 24913 0 11:29 pts/19 00:00:00 ./testpid
24916 24913 0 11:29 pts/19 00:00:00 ./testpid
24917 24915 0 11:29 pts/19 00:00:00 ./testpid
24918 24917 0 11:29 pts/19 00:00:00 ./testpid
‘伍’ Linux下C语言 编写程序创建3个进程,三个进程分别完成不同的事情
两次建立子进程就行了啊~~
父子孙:
pid_tpid;
pid=fork();
//进程地址空间独立
if(pid<0){
}
if(pid==0){
pid=fork();
if(pid<0){
}
if(pid==0){
printf("789");//孙
}
if(pid>0){
printf("456");//子
}
}
if(pid>0){
printf("123");//父
}
发散思维即可
‘陆’ 使用C语言编程实现:父进程创建二个子进程,三个进程各自打印出其进程
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
int main()
{
int i=2;
int pid=0;
printf("father id=%ld ",getpid());
while(i-->0){
pid = fork();
if(pid==0){
printf("son id=%ld ",getpid());
return 0;
}
}
return 0;
}
‘柒’ 编写c程序完成: 父进程创建两个子进程,每个子进程在屏幕上显示自己的ID号
#include <sys/types.h>
#include <unistd.h>
int main(void)
{
int i=2;
pid_t pid;
while(i--){
if((pid=fork())<0){
err_sys("fork error\n");
exit(1);
}
else if(pid==0){
printf("Child Thread: my pid is %d.\n",getpid());
break;
}else{
printf("Parent Thread: create thread, pid is %d.\n",pid);
}
}
exit(0);
}