LINUX期末复习 进程与进程管理
一、LINUX的进程状态 僵死态:当父进程还没有结束前,子进程就已经先结束了,这时子进程的资源没有人来回收。通常父进程需要用wait来等待子进程的结束。
进程的模式:用户模式(执行用户程序),内核模式(执行操作系统代码)
进程的类型:系统进程,用户进程 二、进程管理 ①fork函数
功能:创建一个全新的进程。
头文件:
#include
#include
函数原型:pid_t wait (int * status);
说明:这个系统调用对当前进程进行复制,在进程表里创建出一个项目,新进程与原进程几乎一样,执行的是相同的代码,只是新进程有自己的数据空间、环境和文件描述符。
返回值:父进程调用返回新子进程ID,新进程继续执行;在子进程返回0。
举例:
pid_t new_pid;
new_pid = fork();
switch(new_pid)
{
case -1:break;
case 0:break
default:break;
} ②wait函数
函数处理的基本过程:
—如果父进程没有子进程,则出错返回。
—如果发现有一个终止的子进程,则取出子进程的进程号,把子进程的CPU使用时间等加到父进程上,释放子进程占用的task_struct和系统空间堆栈,以供新进程使用。
—如果发现有子进程,但都不处于终止态,则父进程睡眠,等待由相应的信号唤醒。
功能:等待子进程中断或结束
头文件:
#include
#include
函数原型:pid_t wait (int * status);
说明:函数会暂时停止目前进程的执行,直到有信号来到或子进程结束。如果在调用wait()时子进程已经结束,则wait()会立即返回子进程结束状态值。子进程的结束状态值会由参数status 返回,而子进程的进程识别码也会同时返回。如果不在意结束状态值,则参数status可以设成NULL。子进程的结束状态值请参考waitpid()。
返回值:如果执行成功则返回子进程识别码(PID),如果有错误发生则返回-1。失败原因存于errno中。
举例:
③execl函数
头文件:#include
函数原型:
int execl(const char * path,const char * arg,....);
返回值:成功则函数不会返回,执行失败则直接返回-1,失败原因存于errno中。
说明:
execl()用来执行参数path字符串所代表的文件路径,参数代表执行该文件时传递过去的argv(0)、argv[1]……,最后一个参数必须用空
相关文档:
1. HCI层协议概述:
HCI提供一套统一的方法来访问Bluetooth底层。如图所示:
从图上可以看出,Host Controller Interface(HCI) 就是用来沟通Host和Module。Host通常就是PC, Module则是以各种物理连接形式(USB,serial,pc-card等)连接到PC上的bluetooth Dongle。
在Host这一端:application,SDP,L2cap等协议 ......
例一:发送Signaling Packet:
Signaling Command是2个Bluetooth实体之间的L2CAP层命令传输。所以得Signaling Command使用CID 0x0001.
多个Command可以在一个C-frame(control frame)中发送。
如果要直接发送Signaling Command.需要建立SOCK_RAW类型的L2CAP连接Socket。这样才有机会自己填充Command Code,Identi ......
关于系统调用劫持
如果一个木马要隐藏起来,不被系统管理员发现。截获系统调用似乎是必须的。大部分情况下,通过修改系统调用表来实现系统调用的劫持。下面是一个典型的截获系统调用的模块:
模块一:
#include
#include
#include
#include
#include
#include
#include
#include
#include
MODULE_LICE ......
在linux中所有的syscall都是调用int 0x80, int 0x80的中断服务程序为system_call(arch/x86/kernel/traps_32.c:set_system_gate(SYSCALL_VECTOR,&system_call). system_call (arch/x86/entry_32.S)最终call *sys_call_table(,%eax,4)来完成一个syscall调用.
即 int 0x80 -> system_call -> s ......