用fork()创建的子进程怎么对其进行挂起以及挂起后怎么让其重新执行。要详细的代码。急... 大虾们帮帮忙

如题所述

看我下面的程序,子进程每两秒钟打印一次 Child print xxx
父进程fork子进程10秒后,向子进程发 SIGSTOP信号,让其停止运行。 再过5秒后,发 SIGCONT 让子进程恢复执行。再过20秒后,杀掉子进程,父进程也结束。还有疑问,可以baidu hi我,记得加分吧。

#include <sys/types.h>
#include <signal.h>
#include <stdio.h>
#include <unistd.h>

void child_process()
{
int i = 0;
printf("Child start...\n");
while(1)
{
sleep(2);
printf("Child print %d\n", ++i);
}
}

int main()
{
int pid;

printf("Fork child process ...\n");
sleep(1);

pid = fork();
if (pid > 0)
{
printf("This is parent process, I will stop child process ~10 seconds later...\n");
sleep(10);

printf("Stop child process\n");
kill(pid, SIGSTOP);

printf("I will wake up child process 5 seconds later...\n");
sleep(5);

printf("Wake up child process\n");
kill(pid, SIGCONT);

/* after 20 seconds, kill child */
sleep(20);
kill(pid, SIGKILL);
wait(NULL);
printf("Bye\n");
}
else
{
child_process();
}
return 0;
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2010-12-20
使用start()不行吗本回答被网友采纳

...挂起以及挂起后怎么让其重新执行。要详细的代码。急... 大虾们帮...
父进程fork子进程10秒后,向子进程发 SIGSTOP信号,让其停止运行。 再过5秒后,发 SIGCONT 让子进程恢复执行。再过20秒后,杀掉子进程,父进程也结束。还有疑问,可以baidu hi我,记得加分吧。include <sys\/types.h> include <signal.h> include <stdio.h> include <unistd.h> void child_proc...

在Linux中,用fork函数产生一个新的子进程,子进程结束后,子进程就成为了...
⒈父进程通过wait和waitpid等函数等待子进程结束,这会导致父进程挂起。⒉ 如果父进程很忙,那么可以用signal函数为SIGCHLD安装handler,因为子进程结束后, 父进程会收到该信号,可以在handler中调用wait回收。⒊ 如果父进程不关心子进程什么时候结束,那么可以用signal(SIGCHLD,SIG_IGN) 通知内核,自己对...

golang 进程创建,fork,以及热重启(无缝升级)
加载一个新程序(路径名为 pathname,参数列表为 argv,环境变量列表为 envp)到当前进程的内存。这将丢弃现存的程序文本段,并为新程序重新创建栈、数据段以及堆。通常将这一动作称为执行一个新程序。没有直接提供 fork 系统调用的封装,而是将 fork 和 execve 合二为一,提供了 syscall.ForkExec。如...

进程的执行和挂起
进程结构体包含标识符、优先级、状态、用户栈、共享库等信息。fork复制父进程结构体,通过修改某些字段创建新进程;execute则进一步修改复制的结构体,加载内存数据,并指定ip地址。当系统创建进程后,设置cs:ip寄存器,用于解析指令。cs:ip被解析时,tss选择子加载到tss寄存器,tss信息加载到cr3、ldt选择子...

什么是connect()系统调用
一、进程控制: fork 创建一个新进程 clone 按指定条件创建子进程 execve 运行可执行文件 exit 中止进程 _exit 立即中止当前进程 getdtablesize 进程所能打开的最大文件数 getpgid 获取指定进程组标识号 setpgid 设置指定进程组标志号 getpgrp 获取当前进程组标识号 setpgrp 设置当前进程组标志号 getpid ...

进程的执行和挂起
首先,让我们走进进程的内核。进程本质上是一个数据结构,它封装了操作系统对所有进程的管理。所有的进程,无论是系统初始化时的第一个启动进程,还是由fork或fork+execute系统调用创建的后续进程,都通过一个精心设计的结构体来定义。这个结构体包含了诸如内存地址、状态、父进程引用等关键信息。在进程的...

perl 如何判断所有子进程都执行完毕后,做首尾工作。
给两个思路,第一个就是每个生成的子进程的pid都保存在主进程里面,例如保存在数组里。然后,在load数据之前,用kill函数将0号信号发送给每个子进程。kill函数的0号信号不会发送真正的信号,只是测试能否向某个进程发送信号。这样,如果每个子进程都已经退出,那么对每个子进程进行kill 0都会得到假值,...

JAVA 的线程这块咋整啊,咋也学不明白啊~~
处于用户态下的进程执行的是应用程序指令、处于核心态下的应用程序进程执行的是操作系统指令。 在Unix操作系统启动过程中,系统自动创建swapper、init等系统进程,用于管理内存资源以及对用户进程进行调度等。在Unix环境下无论是由操作系统创建的进程还要由应用程序执行创建的进程,均拥有唯一的进程标识(PID)。 二、进程与...

嵌入式工程师必须要懂Linux系统中的fork与vfork?!
vfork的实现原理与fork不同,其关键在于共享父进程的地址空间。通过暂时挂起父进程,使得子进程能够在父进程的地址空间中执行。创建一个新的进程控制块和页表,但不为子进程创建新的地址空间,而是使用父进程的地址空间,以提高性能。然而,由于子进程与父进程共享地址空间,需谨慎处理共享资源,以免引发竞争...

什么是守护进程,创建守护进程的步骤是什么?
方法是在进程中调用fork使父进程终止,让Daemon在子进程中后台执行。 if(pid=fork()) exit(0);\/\/是父进程,结束父进程,子进程继续 (2)脱离控制终端,登录会话和进程组 有必要先介绍一下Linux中的进程与控制终端,登录会话和进程组之间的关系:进程属于一个进程组,进程组号(GID)就是进程组长的进程号(PID)。登录...

相似回答
大家正在搜