标签归档:进程

mssql sqlserver 快速杀掉所有进程的方法分享


摘要:
下文分享快速杀死指定数据库中所有进程的方法分享,如下所示:
实验环境:sql server 2008 R2


例:
下文分享通过sys.sysprocesses系统进程批量杀死指定数据库中的进程的方法分享

     select 'kill '+convert(varchar(10),spid)  from 
		sys.sysprocesses 
		where dbid =db_id('数据库名称')
	---将生成的数据,复制到查询分析器中,然后运行,将可以杀掉指定数据库中的所有进程
  

mssql sqlserver数据库中会话、连接、进程之间的关系


摘要:
下文讲述mssql sqlserver下会话、连接、进程之间的关系



一、sqlserver下会话、连接、进程简介

会话:会话是从通信开始到通信结束的通信双方之间的上下文。
会话是存在于实例中的逻辑实体。
这个上下文是服务器端的一块内存:它记录了这次连接的客户机,哪个应用程序,哪个用户登录以及其他信息。
————————————————————————————
连接:连接是从客户端到mssql sqlserver实例的物理路径。
该连接可以在网络上建立,也可以通过IPC机制在本地机器上建立。通常建立客户端进程和专用服务器或调度程序之间的连接。
————————————————————————————
进程:进程是代表客户会话完成工作的进程。
应用程序发送到数据库的SQL语句最终被服务进程接受和执行。
无论是共享服务器还是专用服务器,服务进程的角色都是处理提交的SQL语句。
————————————————————————————

一、sqlserver下会话、连接、进程之间的关系

会话与连接同时建立。
他们是同一事物的不同层次。
简而言之,
连接是物理客户端和服务器之间的通信链路,
会话是逻辑用户和服务器之间的通信交互。
可以在连接上建立零个,一个或多个会话。
即使他们共享相同的数据库物理连接,每个会话都是独立的和独立的。
一次会话中的提交不会影响该连接上的任何其他会话。
事实上,没有相应的对话也可能有连接。
另外,会话可以有连接或没有连接。借助高级连接功能(如连接池),
客户可以在会话保持不变的情况下删除物理连接(但会话空闲)。
当客户端在此会话上执行操作时,它将重新建立物理连接。
————————————————————————————
例:
我们登入一个业务管理系统,系统将建立一个”连接”,当我们打开一个Tab ,就建立一个会话,打开另外一个Tab,就会建立一个新的会话,
连接断开,将会释放相关资源。
————————————————————————————
专用服务器:同一连接上的所有会话由同一进程创建。
共享服务器:同一连接上的会话可能由不同的进程创建。

linux c 进程fork

linux c提供了一个进程操作函数fork,下文主要阐述fork的应用。
一 获取进程ID
在linux中每个进程都有一个进程ID号(非负的正整数),通过getpid函数可以返回进程的PID,getppid函数可以返回父进程的ID号。
调用函数getpid getppid需要引入相应的头文件
#include < unistd.h>
#include < sys/types.h>
pid_t getpid(void);
pid_t gettpid(void);
getpid gettpid函数返回一个类型为pid_t的整数值
fork获取进程id
从上面的示例程序可以看出,父进程ID和每次执行程序所产生的新的进程Id。
二 创建和终止进程
进程有三种状态:
运行:进程在cpu上执行,等待被执行
停止:进程运行时被挂起,不会被再次调度,信号(SIGSTOP SIGTSTP SIDTTIN SIGTTOU)会使进程停止,直到收到信号(SIGCONT)才会重新唤起进程,使进程再次运行。
终止:进程被永远停止;当进程收到停止信号 运行到终止进程的位置 调用exit函数。


在linux c中父进程通过使用fork函数创建子进程。
#include < unistd.h>
#include < sys/types.h>
pid_t fork(void); //子进程创建成功返回0 否则返回-1
新创建的子进程几乎同父进程相同,子进程通常会得到一份同父进程用户级虚拟地址空间相同的一份copy ,包括文本 数据 bss段 堆 用户栈。子进程还拥有同父进程一样的状态信息(例 父进程打开文件一份文件,此时创建一个子进程,那么子进程也可以直接访问文件);
新创建的子进程同父进程最大的区别在于 拥有不同的进程号(PID);
fork创建进程
从上面的示例我们可以看出
1 fork时候 copy了一份代码作为子进程运行,所以一次调用fork,却使代码运行了两遍;
2 从x的值的变化,我们可以看出程序拥有不同的存储空间;
3 子进程和父进程共享I/O文件;

三 fork扩展
#include < stdio.h>
#include < unistd.h>
#include < sys/types.h>
int main(){
int x=0;
fork();
fork();
printf(“this x is %d\n”,++x);
return 0;
}
多次fork
从上面的示例可以看出fork时嵌套执行,及 一次fork为 2次执行 二次fork为四次 三次fork 八次 4次fork则为 二的4次方次运行。