perl中如何控制子进程的标准输入?

perl中如何控制子进程的标准输入?,第1张

@_ 在某个函数内,数组 @_ 包含传递给该函数的所有参数。

$_ 默认的输入/输出和格式匹配空间

--------------------------------------------------------------------------------------------------------

@_的示例:

#!/bin/perl -w

use strict

&fun( 111,222,333 )

sub fun()

{

print @_

}

这里会把传入函数的参数111222333打印出来。

---------------------------------------------------------------------------------------------

$_示例:

下面的几对代码都是等同的:

while (<>) # equivalent only in while!

while (defined($_ = <>))

/^Subject:/

$_ =~ /^Subject:/

tr/a-z/A-Z/

$_ =~ tr/a-z/A-Z/

chomp

chomp($_)

以下是几处即使没有写明 Perl 也会假定使用 $_ 的地方:

* 各种单目函数,包括像 ord() 和 int() 这样的函数以及除 "-t"

以外所有的文件 测试操作 ("-f","-d"),"-t" 默认操作 STDIN。

* 各种列表函数,例如 print() 和 unlink()。

* 没有使用 "=~" 运算符时的模式匹配操作 "m//"、"s///" 和

"tr///"。

* 在没有给出其他变量时是 "foreach" 循环的默认迭代变量。

* grep() 和 map() 函数的隐含迭代变量。

* 当 "while" 仅有唯一条件,且该条件是对 "<FH>"

操作的结果进行测试时,$_ 就是存放输入记录的默认位置。除了

"while" 测试条件之外不会发生这种情况。

(助记:下划线在特定操作中是可以省略的。)

--------------------------------------------------------------------------------------------------

@_和$_都是perl很常用的特殊变量。建议系统看一下《perl语言入门》。

----------------------------------------------------------------------------------------------------------------

另附perl常用特殊变量列表:

perl 内置变量

$- 当前页可打印的行数,属于Perl格式系统的一部分

$! 根据上下文内容返回错误号或者错误串

$” 列表分隔符

$# 打印数字时默认的数字输出格式

$$ Perl解释器的进程ID

$% 当前输出通道的当前页号

$&与上个格式匹配的字符串

$( 当前进程的组ID

$) 当前进程的有效组ID

$* 设置1表示处理多行格式.现在多以/s和/m修饰符取代之.

$, 当前输出字段分隔符

$. 上次阅读的文件的当前输入行号

$/ 当前输入记录分隔符,默认情况是新行

$: 字符设置,此后的字符串将被分开,以填充连续的字段.

$在仿真多维数组时使用的分隔符.

$? 返回上一个外部命令的状态

$@ Perl解释器从eval语句返回的错误消息

$[ 数组中第一个元素的索引号

$\ 当前输出记录的分隔符

$] Perl解释器的子版本号

$^ 当前通道最上面的页面输出格式名字

$^A 打印前用于保存格式化数据的变量

$^D 调试标志的值

$^E 在非UNIX环境中的操作系统扩展错误信息

$^F 最大的文件捆述符数值

$^H 由编译器激活的语法检查状态

$^I 内置控制编辑器的值

$^L 发送到输出通道的走纸换页符

$^M 备用内存池的大小

$^O 操作系统名

$^P 指定当前调试值的内部变量

$^R 正则表达式块的上次求值结果

$^S 当前解释器状态

$^T 从新世纪开始算起,脚步本以秒计算的开始运行的时间

$^W 警告开关的当前值

$^X Perl二进制可执行代码的名字

$_ 默认的输入/输出和格式匹配空间

$| 控制对当前选择的输出文件句柄的缓冲

$~ 当前报告格式的名字

$` 在上个格式匹配信息前的字符串

$’ 在上个格式匹配信息后的字符串

$+ 与上个正则表达式搜索格式匹配的最后一个括号

$<当前执行解释器的用户的真实ID

$ 含有与上个匹配正则表达式对应括号结果

$= 当前页面可打印行的数目

$>当前进程的有效用户ID

包含正在执行的脚本的文件名

$ARGV 从默认的文件句柄中读取时的当前文件名

%ENV 环境变量列表

%INC 通过do或require包含的文件列表

%SIG 信号列表及其处理方式

@_ 传给子程序的参数列表

@ARGV 传给脚本的命令行参数列表

@INC 在导入模块时需要搜索的目录列表

$-[0]和$+[0] 代表当前匹配的正则表达式在被匹配的字符串中的起始和终止的位置

oracle 程序本身很多服务就是用perl编写的,不能结束。

100% 有两点,一种就是oracle 本身配置有问题, 可以通过查看日志。

还有一种就是客户端有人执行了一个很耗资源的sql并同时访问大量的数据。

下面几个sql应该可以帮你:

查询耗资源的进程(top session)

SELECT s.Schemaname Schema_Name,Decode(Sign(48 - Command),

1, To_Char(Command), 'Action Code #' || To_Char(Command)) Action,Status Session_Status, s.Osuser Os_User_Name, s.Sid, p.Spid,s.Serial# Serial_Num, Nvl(s.Username, '[Oracle process]') User_Name,

s.Terminal Terminal, s.Program Program, St.VALUE Criteria_Value

FROM V$sesstat St, V$session s, V$process p

WHERE St.Sid = s.Sid

AND St.Statistic# = To_Number('38')

AND ('ALL' = 'ALL' OR s.Status = 'ALL')

AND p.Addr = s.Paddr

ORDER BY St.VALUE DESC, p.Spid ASC, s.Username ASC, s.Osuser ASC

查看锁(lock)情况

SELECT /*+ RULE */ Ls.Osuser Os_User_Name, Ls.Username User_Name,Decode(Ls.TYPE,

'RW', 'Row wait enqueue lock', 'TM', 'DML enqueue lock','TX', 'Transaction enqueue lock', 'UL', 'User supplied lock') Lock_Type,o.Object_Name OBJECT,Decode(Ls.Lmode,1, NULL, 2, 'Row Share', 3, 'Row Exclusive',

4, 'Share', 5, 'Share Row Exclusive', 6, 'Exclusive',NULL) Lock_Mode,o.Owner, Ls.Sid, Ls.Serial# Serial_Num, Ls.Id1, Ls.Id2 FROM Sys.Dba_Objects o,

(SELECT s.Osuser, s.Username, l.TYPE, l.Lmode, s.Sid, s.Serial#, l.Id1,l.Id2 FROM V$session s, V$lock l

WHERE s.Sid = l.Sid) Ls

WHERE o.Object_Id = Ls.Id1

AND o.Owner <>'SYS'

ORDER BY o.Owner, o.Object_Name

根据sid查看对应连接正在运行的sql

SELECT /*+ PUSH_SUBQ */ Command_Type, Sql_Text, Sharable_Mem, Persistent_Mem, Runtime_Mem, Sorts,

Version_Count, Loaded_Versions, Open_Versions, Users_Opening, Executions,

Users_Executing, Loads, First_Load_Time, Invalidations, Parse_Calls,

Disk_Reads, Buffer_Gets, Rows_Processed, SYSDATE Start_Time,

SYSDATE Finish_Time, '>' || Address Sql_Address, 'N' Status

FROM V$sqlarea WHERE Address = (SELECT Sql_Address

FROM V$session WHERE Sid = &sid )


欢迎分享,转载请注明来源:夏雨云

原文地址:https://www.xiayuyun.com/zonghe/404138.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-21
下一篇2023-05-21

发表评论

登录后才能评论

评论列表(0条)

    保存