『壹』 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);
}