一、什么是进程,进程调用的流程?
进程(程序):
是静态概念,
一个class文件、一个exe文件线程:
是一个程序里面不同的执行路径相关给概念解释:
程序执行过程
:把程序的代码放到内存的代码区里面,这时候一个进程已经产生,但是还没有开始执行。平时说的进程的执行是指进程里面主线程开始执行了(main方法开始执行了)。举例说明:
程序中的路径或者线程也就是main方法(共一条):
路径图解释:
Main方法执行到m3();语句的时候开始调用m3的方法,此时main方法不会继续往下执行,而是等到m3方法执行结束以后才继续执行。在m3方法中执行到m1( );语句的时候会调用m1的方法,此时m2( );语句不会继续往下执行,而是等到m1方法的返回,才继续执行m2的方法。m2方法的返回以后m3继续执行,等到m3返回以后main方法继续执行,这是完整的一条路径也就是一个线程。
二、linux如何查进程,杀进程,重启进程?
查找进程ps -ef | grep -v grep | grep "XXXXX"杀进程kill -9 `ps -ef | grep -v grep | grep XXXXX | awk '{print $2}'`重起service XXXX restart
三、Linux 进程如何查看进程详情?
可以使用top查看,命令行输入top会显示目前正在运行的进程,并根据内存占用情况依次从大到小进行排列。
也可以在终端中使用bashtop或btop++更方便的查看目前正在运行的进程,若是图形化界面可使用任务管理器查看进程。
四、进程控制块包括进程组进程环境?
进程控制块是操作系统中最重要的数据结构,每个进程控制块包含了操作系统在调度、资源分配、中断处理、性能监控和分析所需的关于进程的所有信息。
进程控制块信息可以分为三类:进程标识信息、处理器状态信息、进程控制信息。
五、进程的定义?
狭义定义:进程是正在运行的程序的实例(an instance of a computer program that is being executed)。
广义定义:进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动。它是操作系统动态执行的基本单元,在传统的操作系统中,进程既是基本的分配单元,也是基本的执行单元。
进程的概念主要有两点:第一,进程是一个实体。每一个进程都有它自己的地址空间,一般情况下,包括文本区域(text region)、数据区域(data region)和堆栈(stack region)。文本区域存储处理器执行的代码;数据区域存储变量和进程执行期间使用的动态分配的内存;堆栈区域存储着活动过程调用的指令和本地变量。第二,进程是一个“执行中的程序”。程序是一个没有生命的实体,只有处理器赋予程序生命时(操作系统执行之),它才能成为一个活动的实体,我们称其为进程。[3]
进程是操作系统中最基本、重要的概念。是多道程序系统出现后,为了刻画系统内部出现的动态情况,描述系统内部各道程序的活动规律引进的一个概念,所有多道程序设计操作系统都建立在进程的基础上
六、描述就绪进程和等待进程的区别?
进程就绪状态是指进程已获得除CPU之外的所有必须资源,只等待操作系统利用CPU调度算法将CPU分配给该进程以便执行. 进程阻塞状态也称进程等待状态,是指进程等待某一特定事件的出现(如I/O操作),在该过程中,进程依旧位于内存内,且占有CPU资源.
七、linux如何查进程、杀进程?
查进程,ps -ef |grep xxx.
杀进程,kill -9 xxx.
八、进程与进程控制块之间的关系?
进程是指一个具有一定独立功能的程序在一个数据集合上的一次动态执行过程。
进程控制块的作用:
我们的系统当前运行了若干进程,那么操作系统是如何管理这些进程呢?
操作系统对这些进程只做两件事情:“描述”+“组织”。
描述:将进程描述出来,就需要描述出来当前进程的各种信息,我们的操作系统将这些各种信息放在一个结构体中,这个结构体就称为进程控制块。
组织:用我们所学过的数据结构的各种各样的数据结构知识将这些结构体组织起来,例如:双链表结构,索引表结构。
索引表:同一状态的进程归入一个索引表,多个状态对应多个不同的索引表。
九、Linux下进程的创建与进程间通信?
代码示例:
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#define READ_TERMINAL 0
#define WRITE_TERMINAL 1
int main() {
int file_descriptors[2];
pid_t pid_f;
char PipeBuf[64]={‘a’,‘0’};
int read_ret=0;
pipe(file_descriptors);
pid_f=fork();
if (pid_f<0)
{
printf(“fork error!\n”);
exit(1);
}
else if (pid_f==0)
{
//子进程向父进程发一则消息
printf(“Write in Pipe To FatherProcess!\n”);
close(file_descriptors[READ_TERMINAL]);
sleep(1);
write(file_descriptors[WRITE_TERMINAL],“Child Send”,sizeof(“Child Send”));
//open(file_descriptors[READ_TERMINAL]);
}
else
{
//父进程接收(读取)消息
printf(“Read in Pipe From ChildProcess!\n”);
//通过fcntl()修改为使得读管道数据具有非阻塞的特性
int flag=fcntl(file_descriptors[READ_TERMINAL],F_GETFL,0);
flag |= O_NONBLOCK;
if(fcntl(file_descriptors[READ_TERMINAL],F_SETFL,flag) < 0){
perror(“fcntl”);
exit(1);
}
close(file_descriptors[WRITE_TERMINAL]);
read_ret=read(file_descriptors[READ_TERMINAL],PipeBuf,sizeof(PipeBuf));//没阻塞的读
printf(“Read Message are : %s\n”,PipeBuf);
十、如何在windows下查看进程的子进程?
想要获得windows下面进程的详细信息,仅靠一个任务管理器是不行的。Doc提供了一些命令可以做到这个问题。在开始运行里面输入:就可以查看到进程的路径,这个时候,应用程序可以做一些操作,比如算程序的MD5值等。
然后可以根据tasklist命令查看他的详细信息。
假如想Kill进程,那么就采用ntsd-cq-pPID命令,此命令号称是无敌的,只有System、SMSS.EXE和CSRSS.EXE不能杀。
前两个是纯内核态的,最后那个是Win32子系统,ntsd本身需要它。ntsd从2000开始就是系统自带的用户态调试工具。被调试器附着(attach)的进程会随调试器一起退出,所以可以用来在命令行下终止进程。
使用ntsd自动就获得了debug权限,从而能杀掉大部分的进程。用法:开个cmd.exe窗口,输入:ntsd-cq-pPID把最后那个PID,改成你要终止的进程的ID。
如果你不知道进程的ID,任务管理器-》进程选项卡-》查看-》选择列-》勾上"PID(进程标识符)",然后就能看见了。自己理解
- 相关评论
- 我要评论
-