Linux 进程创建一(system和fork)】的更多相关文章

一:system系统调用 #include <stdlib.h> int system(const char *string); system函数传递给/bin/sh -c 来执行string所指定的命令. string中可以包含选项和参数 如果没有找到/bin/sh.函数返回127,如果出现其他错误返回-,成功返回0,但如果string为NULL,返回一个非0值 system调用其他进程是通过shell调用其他进程,本程序进程与被调用的进程之间没有关系. #include <stdio…
在Linux中,进程的创建由系统调用fork和vfork完成.它们生成一个子进程并且子进程是父进程的一个复制品. Fork系统调用对应的kernel函数是sys_fork,此函数简单的调用kernel函数do_fork.一个简化版的do_fork执行如下: (1)alloc_pid().给新的进程分配一个新的pid,即进程号 (2)copy_process()此函数会做fork的大部分事情,它主要完成讲父进程的运行环境复制到新的子进程,比如信号处理.文件描述符和进程的代码数据等. (3)wake…
三:execve系统调用 int execve(const char *filename, char *const argv[],char *const envp[]); fork创建了一个新的进程,产生一个新的PID execve用被执行的程序完全替换了调用进程的映像. execve启动一个新程序,替换原有进程,所以被执行进程的PID不会改变. execve函数接受三个参数 --path 要执行的文件完整路径 --argv 传递给程序完成参数列表,包括argv[],它一般是执行程序的名字,最后…
目录: 1.clone.fork与vfork介绍 2.fork说明 3.vfork说明 4.clone说明5.fork,vfork,clone的区别 内容: 1.clone.fork与vfork介绍 Linux下的进程与线程相同点是都有进程控制块(PCB,具体的类是task_struct).区别在于一个有独立的进程资源,一个是共享的进程资源.除了内核线程是完全没有用户空间.进程资源包括进程的PCB.线程的系统堆栈.进程的用户空间.进程打开的设备(文件描述符集)等. Linux的用户进程不能直接被…
System V消息队列是Open Group定义的XSI,不属于POSIX标准.System V IPC的历史相对很早,在上个世70年代后期有贝尔实验室的分支机构开发,80年代加入System V的系统内核中,后来商用UNIX系统基本都加入了System V IPC的功能. System V消息队列相对于POSIX消息队列的区别主要是: POSIX消息队列的读操作总是返回消息队列中优先级最高的最早消息,而对于System V消息队列可以返回任意指定优先级(通过消息类型)的消息. 当向一个空消息…
1.  进程是程序的执行,会被加载到内存中,每个进程包括程序的代码和数据,其中数据包括程序的变量的数据,外部数据,程序堆栈. 2. Linux中,输入命令,如vi main.c 通过shell来执行,会建立一个新的进程来运行它. 3. 多个用于可以同时运行同一个程序,每个用户对该程序的运行均是独立的进程, 4.Linux中,一个进程可以启动另外一个进程,打开Linux系统,进程树的顶端是一个控制进程,他是一个名叫init的程序的执行,该进程是所有用户 进程的祖先.系统调用时操作系统要把程序从用户…
前面已经介绍过了POSIX共享内存区,System V共享内存区在概念上类似POSIX共享内存区,POSIX共享内存区的使用是调用shm_open创建共享内存区后调用mmap进行内存区的映射,而System V共享内存区则是调用shmget创建共享内存区然后调用shmat进行内存区的映射. 对每个System V共享内存区,内核会维护一个shmid_ds的数据结构,Linux 2.6.18 中的定义如下: <bits/shm.h> /* 连接共享内存区的进程数的数据类型 */ typedef…
进程间通信的机制--信号量.注意请不要把它与之前所说的信号混淆起来,信号与信号量是不同的两种事物.有关信号的很多其它内容,能够阅读我的还有一篇文章:Linux进程间通信--使用信号.以下就进入信号量的解说. 一.什么是信号量 为了防止出现因多个程序同一时候訪问一个共享资源而引发的一系列问题,我们须要一种方法,它能够通过生成并使用令牌来授权,在任一时刻仅仅能有一个运行线程訪问代码的临界区域.临界区域是指运行数据更新的代码须要独占式地运行.而信号量就能够提供这种一种訪问机制,让一个临界区同一时间仅仅…
26.1 system 函数 26.1.1 函数说明 system(执行shell 命令)相关函数 fork,execve,waitpid,popen #include <stdlib.h> int system(const char * string); 函数功能:简化 exec 函数 函数说明 system()会调用 fork() 产生子进程,由子进程来调用 /bin/sh -c string 来执行参数 string 字符串所代表的命令,此命令执行完后随即返回原调用的进程. 在调用 sy…
进程创建 在Linux系统下,自己可以创建进程: 当进程执行时,它会被装载进虚拟内存,为程序变量分配空间,并把相关信息添到 task_struct里. 进程内存布局分为四个不同的段: • 文本段,包含程序的源指令. • 数据段,包含了静态变量. • 堆,动态内存分区区域. • 栈,动态增长与收缩的段,保存本地变量. 下面来说进程的创建方法: 一:fork: 1.函数原型: pid_t fork( void); 2.返回值: 若成功调用一次则返回两个值,子进程返回0,父进程返回子进程ID:否则,出…