C语言创建进程
刚来美国读研,操作系统课上有一道作业要求:写一个C语言程序创建5个进程,进程j(从1到5)输出j的值和它的pid,父进程等待所有子进程结束后结束。本科光信息专业编程接触的...
刚来美国读研,操作系统课上有一道作业要求:写一个C语言程序创建5个进程,进程j(从1到5)输出j的值和它的pid,父进程等待所有子进程结束后结束。本科光信息专业编程接触的很少,现在无从下手,也在网上查了很多但还是不知道怎样和自己的问题结合起来。目前只知道用fork()函数创建进程,然后显示pid。其他的就不知道具体怎么操作了。老师上课用了下面这样一段程序,可我在自己电脑windows下编译总是提示sys/signal.h:no such file or directory.这两天感觉好无助,希望能得到一些指导和建议,万分感谢!
#include <sys/signal.h>
#include <stdio.h>
int fork(void);
int getpid(void), getppid(void);
int main()
{
int pid;
printf("INITIAL: pid of old process is %d\n",getpid());
if ((pid=fork())==0) {
/* child code */
printf("CH: my pid = %d\n",getpid());
printf("CH: pid in child (should be zero) %d\n",pid);
printf("CH: pid of parent's id = %d\n",getppid());
}
else {
/* parent's code */
printf("PAR: inside parent; pid of child is %d\n",pid);
printf("PAR: pid of parents' parent = %d\n",getppid());
sleep(20);
}
/* common code */
printf("COMMON: printed by process with pid = %d\n",getpid());
} 展开
#include <sys/signal.h>
#include <stdio.h>
int fork(void);
int getpid(void), getppid(void);
int main()
{
int pid;
printf("INITIAL: pid of old process is %d\n",getpid());
if ((pid=fork())==0) {
/* child code */
printf("CH: my pid = %d\n",getpid());
printf("CH: pid in child (should be zero) %d\n",pid);
printf("CH: pid of parent's id = %d\n",getppid());
}
else {
/* parent's code */
printf("PAR: inside parent; pid of child is %d\n",pid);
printf("PAR: pid of parents' parent = %d\n",getppid());
sleep(20);
}
/* common code */
printf("COMMON: printed by process with pid = %d\n",getpid());
} 展开
2个回答
展开全部
fork()应该是Linux操作系统的函数。
从#include <sys/signal.h>和fork()上判断,这个程序应该是Linux操作系统的应用程序。
Windows上应该用CreateProcess创建进程
获取进程ID用
DWORD GetWindowThreadProcessld(HWND hwnd,LPDWORD lpdwProcessld)
hWnd:窗口句柄。
lpdwProcessld:接收进程标识的32位值的地址。如果这个参数不为NULL,GetWindwThreadProcessld将进程标识拷贝到这个32位值中,否则不拷贝。
返回值:返回值为创建窗口的线程标识。
从#include <sys/signal.h>和fork()上判断,这个程序应该是Linux操作系统的应用程序。
Windows上应该用CreateProcess创建进程
获取进程ID用
DWORD GetWindowThreadProcessld(HWND hwnd,LPDWORD lpdwProcessld)
hWnd:窗口句柄。
lpdwProcessld:接收进程标识的32位值的地址。如果这个参数不为NULL,GetWindwThreadProcessld将进程标识拷贝到这个32位值中,否则不拷贝。
返回值:返回值为创建窗口的线程标识。
展开全部
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/wait.h>
int main()
{
for(int j=0; j<5; ++j) {
int pid = fork();
if ( pid == 0 ) { // child
printf("j : %d, pid : %d.\n",j, getpid() );
exit (0);
} else if ( pid < 0 ) { // error
exit ( -1);
}
}
for(int i=0; i<5; ++i) {
wait(NULL);
}
printf("End !\n");
return 0;
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询