从#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()函数实现创建进程。