网站建设视频vs,商丘seo排名,中国外贸网站大全,风向标网站建设到现在为止#xff0c;我们知道无论何时执行程序#xff0c;都会创建一个进程#xff0c;并且该进程将在执行完成后终止#xff0c;如果我们需要在程序中创建一个进程#xff0c;并且可能希望为其安排其他任务#xff0c;该怎么办。能做到吗?是的#xff0c;显然是通过…
到现在为止我们知道无论何时执行程序都会创建一个进程并且该进程将在执行完成后终止如果我们需要在程序中创建一个进程并且可能希望为其安排其他任务该怎么办。能做到吗?是的显然是通过进程创建的当然工作完成后它将自动终止或者您可以根据需要终止它。
进程创建是通过 fork()系统调用实现的新创建的进程称为子进程而启动它的进程(或开始执行时的进程)称为父进程。在fork()系统调用之后现在我们有两个进程-父进程和子进程。如何区分它们?很简单就是通过它们的返回值。 创建子进程后让我们看到fork()系统调用详细信息。
#include sys/types.h
#include unistd.hpid_t fork(void);
创建子进程此调用之后有两个进程现有的一个称为父进程而新创建的一个称为子进程。
fork()系统调用返回以下三个值之一:
负值 - 表示错误即创建子进程失败。0 - 表示为子进程。正值 - 表示新创建的子进程的进程ID。
让我们考虑一个简单的程序。
File name: basicfork.c
#include stdio.h
#include sys/types.h
#include unistd.hint main() {fork();printf(Called fork() system call\n);return 0;
}
执行步骤
汇编
gcc basicfork.c -o basicfork
执行/输出
Called fork() system call
Called fork() system call
注意-通常在fork()调用之后子进程和父进程将执行不同的任务。如果需要运行相同的任务则对于每个fork()调用它将运行2次幂n次其中 n 是fork()被调用的次数。
看到fork()创建了子进程之后就该查看父进程和子进程的详细信息了。
文件名:pids_after_fork.c
#include stdio.h
#include sys/types.h
#include unistd.hint main() {pid_t pid, mypid, myppid;pid getpid();printf(Before fork: Process id is %d\n, pid);pid fork();if (pid 0) {perror(fork() failure\n);return 1;}//Child processif (pid 0) {printf(This is child process\n);mypid getpid();myppid getppid();printf(Process id is %d and PPID is %d\n, mypid, myppid);} else { //Parent process sleep(2);printf(This is parent process\n);mypid getpid();myppid getppid();printf(Process id is %d and PPID is %d\n, mypid, myppid);printf(Newly created process id or child pid is %d\n, pid);}return 0;
}
汇编执行
Before fork: Process id is 166629
This is child process
Process id is 166630 and PPID is 166629
Before fork: Process id is 166629
This is parent process
Process id is 166629 and PPID is 166628
Newly created process id or child pid is 166630
进程可以通过以下两种方式之一终止:
通常在传递某些信号(如终止信号)时发生。通常使用_exit()系统调用(或_Exit()系统调用)或exit()库函数。
_exit()和exit()之间的区别主要是清理活动 exit()在将控件返回内核之前会进行一些清理而 _exit()(或_Exit())会将控件立即返回内核。
考虑以下带有exit()的示例程序。
文件名称:atexit_sample.c
#include stdio.h
#include stdlib.hvoid exitfunc() {printf(Called cleanup function - exitfunc()\n);return;
}int main() {atexit(exitfunc);printf(Hello, World!\n);exit (0);
}
汇编执行
Hello, World!
Called cleanup function - exitfunc()
考虑以下带有_exit()的示例程序。
文件名称:at_exit_sample.c
#include stdio.h
#include unistd.hvoid exitfunc() {printf(Called cleanup function - exitfunc()\n);return;
}int main() {atexit(exitfunc);printf(Hello, World!\n);_exit (0);
}
汇编执行
Hello, World! 进程 - 创建终止 - 无涯教程网无涯教程网提供到现在为止我们知道无论何时执行程序都会创建一个进程并且该进程将在执行完成后...https://www.learnfk.com/process/inter-process-communication-process-creation-termination.html