一 概念:
進程是運行中的程序,是操作系統分配資源的最基本的單位。
二 進程標識符pid:
類型pid_t
命令ps
進程標識符是順序依次向下使用
getpid();
getppid();
三 進程的產生:fork()
fork意味着拷貝,一模一樣的命令 cow。未決信號與文件鎖不繼承,返回值不相同。資源利用量歸0
init進程:1號進程是所有進程的祖先進程
四 進程的消亡與釋放資源
wait();
waitpid();
執行誰分配誰釋放原則
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include <unistd.h>
#include <sys/wait.h>
void test1()
{
pid_t pid1;
pid1 = fork();
if(pid1 == 0) {
usleep(100);
printf("%d: I am child\n", getpid());
}
if(pid1 > 0) {
printf("%d: I am parent\n", getpid());
}
}
void test2()
{
pid_t pid1;
pid1 = fork();
if(pid1 == 0) {
usleep(100);
printf("%d: I am child\n", getpid());
}
if(pid1 > 0) {
printf("%d: I am parent\n", getpid());
}
wait(&pid1);
}
void test3()
{
execl("/tmp/out", "echo 2 >");
}
int main(int argc, char **argv)
{
int i = atol(argv[1]);
switch (i) {
case 1:
test1();
break;
case 2:
test2();
break;
case 3:
test3();
break;
default:
break;
}
exit(0);
}
五 exec函數族
int execl(const char *path, const char *arg0, ... /*, (char *)0 */);
int execle(const char *path, const char *arg0, ... /*, (char *)0, char *const envp[] */);
int execlp(const char *file, const char *arg0, ... /*, (char *)0 */);
int execv(const char *path, char *const argv[]);
int execvp(const char *file, char *const argv[]);
execvP(const char *file, const char *search_path, char *const argv[]);