C语言创建进程

Python013

C语言创建进程,第1张

fork()应该是Linux操作系统的函数。

从#include <sys/signal.h>和fork()上判断,这个程序应该是Linux操作系统的应用程序。

Windows上应该用CreateProcess创建进程

获取进程ID用

DWORD GetWindowThreadProcessld(HWND hwnd,LPDWORD lpdwProcessld)

hWnd:窗口句柄。

lpdwProcessld:接收进程标识的32位值的地址。如果这个参数不为NULL,GetWindwThreadProcessld将进程标识拷贝到这个32位值中,否则不拷贝。

返回值:返回值为创建窗口的线程标识。

多进程这个词用得比较少,听过来有点不熟悉。你这个程序在linux下应该很容易实行,就是个进程间通信的问题,管道、消息队列、共享内存都可以,可以找找相关资料。昨天失言不好意思。

三个源文件分别为1.c、2.c、3.c一个头文件share.h。

share.h:

//共享的内存,两个数组

typedef struct{

int a[2]

int b[2]

int id

}share_use

1.c:

#include<unistd.h>

#include<stdio.h>

#include<stdlib.h>

#include<string.h>

#include<sys/types.h>

#include<sys/ipc.h>

#include<sys/shm.h>

#include"share.h"

int main(){

void *shared_memory = (void *)0

share_use *share_stuff

int shmid

shmid=shmget((key_t)1234,sizeof(share_use),0666|IPC_CREAT)//创建共享内存

if(shmid==-1){

fprintf(stderr,"共享内存创建失败!\n")

exit(1)

}

shared_memory = shmat(shmid, (void *)0,0)//让进程可以访问共享内存

if(shared_memory == (void *)-1){

fprintf(stderr,"启用共享内存失败!\n)"

exit(1)

}

printf("Memory attached at %X\n",(int)shared_memory)

share_stuff = (share_use *)shared_memory

share_stuff->id=0

share_stuff->a[0]=1

share_stuff->a[1]=2

while(1){

if(share_stuff->id)

exit(0)

sleep(10)

}

}

2.c:

#include<unistd.h>

#include<stdio.h>

#include<stdlib.h>

#include<string.h>

#include<sys/types.h>

#include<sys/ipc.h>

#include<sys/shm.h>

#include"share.h"

int main(){

void *shared_memory = (void *)0

share_use *share_stuff

int shmid

shmid=shmget((key_t)1234,sizeof(share_use),0666|IPC_CREAT)//创建共享内存

if(shmid==-1){

fprintf(stderr,"共享内存创建失败!\n")

exit(1)

}

shared_memory = shmat(shmid, (void *)0,0)//让进程可以访问共享内存

if(shared_memory == (void *)-1){

fprintf(stderr,"启用共享内存失败!\n")

exit(1)

}

printf("Memory attached at %X\n",(int)shared_memory)

share_stuff = (share_use *)shared_memory

share_stuff->b[0]=share_stuff->a[0]*100

share_stuff->b[1]=share_stuff->a[1]*100

while(1)

{

if(share_stuff->id)

exit(0)

sleep(10)

}

}

3.c:

#include<unistd.h>

#include<stdio.h>

#include<stdlib.h>

#include<string.h>

#include<sys/types.h>

#include<sys/ipc.h>

#include<sys/shm.h>

#include"share.h"

int main(){

void *shared_memory = (void *)0

share_use *share_stuff

int shmid

shmid=shmget((key_t)1234,sizeof(share_use),0666|IPC_CREAT)//创建共享内存

if(shmid==-1){

fprintf(stderr,"共享内存创建失败!\n")

exit(1)

}

shared_memory = shmat(shmid, (void *)0,0)//让进程可以访问共享内存

if(shared_memory == (void *)-1){

fprintf(stderr,"启用共享内存失败!\n")

exit(1)

}

printf("Memory attached at %X\n",(int)shared_memory)

share_stuff = (share_use *)shared_memory

printf("共享内存中有元素:%d , %d",share_stuff->b[0],share_stuff->b[1])

share_stuff->id=1

return 0

}

linux或unix环境下编译

这个在Linux和在Windows下的实现方法是完全不一样的。因为两个系统创建进程的函数不同。其中Windows环境下的实现非常复杂。

给你两个例子供你参考吧。

Linux环境下的实现:

#include <stdio.h>

int main(int argc, char *argv[])

{

int pid1,pid2

/*调用fork函数创建进程1*/

if ( ( pid1=fork() ) <0 )

{ /*fork()返回值为负数,则创建进程失败*/

printf( "ProcessCreate Failed!")

exit(-1)

}

/**

/*fork()返回值为0,则创建子进程成功且当前进程为子进程

*/

if ( ( pid1=fork() ) == 0 )

{

printf( "b\n" ) //子进程1输出’b’

}

/**

/*创建子进程2

***/

if ( ( pid2=fork() ) <0 ) /*fork()返回值为负数,则创建进程失败*/

{

printf( "ProcessCreate Failed!")

exit(-1)

}

/**

/*fork()返回值为0,则创建子进程成功且当前进程为子进程

*/

if ( ( pid2=fork() ) == 0 )

{

printf( "c\n" ) //子进程2输出’c’

}

/*fork()返回值大于0,则当前进程为父进程*/

else

{

wait(NULL)

printf( "a\n" ) //父进程输出’a’

exit(0)

}

return 0

}

Windows环境下的实现没有写。大概需要使用包含在windows.h中的头文件中的CreateProcess()函数实现创建进程。