1. 专用服务器进程
有多种fork()和exec()调用,如vfork()、execve()等。Oracle 所用的调用可能根据操作系统和实现的不同而有所不同,但是最后的结果是一样的。fork()创建一个新进程,这是父进程的一个克隆,而且在UNIX 上这也是创建新进程的惟一途径。exec()在内存中现有的程序映像上加载一个新的程序映像,这就启动了一个新程序。所以SQL*Plus 可以先“fork”( 即复制自身),然后“exec”Oracle 二进制可执行程序,用这个新程序覆盖它自己的副本。
select a.spid dedicated_server,
b.process clientpid
from v$process a, v$session b
where a.addr = b.paddr
and b.sid = (select sid from v$mystat where rownum=1)
b.process clientpid
from v$process a, v$session b
where a.addr = b.paddr
and b.sid = (select sid from v$mystat where rownum=1)
-------------------------------------
6413 3928:820
[oracle@localhost ~]$ ps -p 6413 3928
PID TTY STAT TIME COMMAND
6413 ? Ss 0:00 oracleorcloa (LOCAL=NO)
[oracle@localhost ~]$ ps -p 6413 3928
PID TTY STAT TIME COMMAND
6413 ? Ss 0:00 oracleorcloa (LOCAL=NO)
ops$tkyte@ORA10G> !/bin/ps -p 5114 5112
PID TTY STAT TIME COMMAND
5112 pts/1 R 0:00 sqlplus
5114 ? S 0:00 oracleora10g
(DESCRIPTION=(LOCAL=YES)..(PROTOCOL=beq)))
PID TTY STAT TIME COMMAND
5112 pts/1 R 0:00 sqlplus
5114 ? S 0:00 oracleora10g
(DESCRIPTION=(LOCAL=YES)..(PROTOCOL=beq)))
在此,我使用了一个查询来发现与专用服务器相关联的进程ID(PID),从V$PROCESS 得到的SPID 是执行该查询时所用进程的操作系统PID。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/28344546/viewspace-749218/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/28344546/viewspace-749218/