在Perl中捕捉和处理 Signals

通过 %SIG Hash

use strict;
use warnings;

$SIG{INT} = sub {die "Caught a sigint $!"};

sleep(100);

如果运行这个Perl程序,然后再按control-c,就会发送 SIGINT 给Perl程序,然后 $SIG{INT} 对应的方法会捕捉到 SIGINT 信号

通过 sigtrap 指令

sigtrap 是用来更方便的维护 %SIG 的指令

sigtrap 把信号分为3组:

  • normal-signals(HUP, PIPE, INT and TERM)

  • error-signals(ABRT, BUS, EMT, FPE, ILL, QUIT, SEGV, SYS and TRAP)

  • old-interface-signals(ABRT, BUS, EMT, FPE, ILL, PIPE, QUIT, SEGV, SYS, TERM and TRAP)

例如:

use strict;
use warnings;
use sigtrap qw/die normal-signals/;

sleep(100);


use strict;
use warnings;
use sigtrap qw/handler signal_handler normal-signals/;

sub signal_handler {
    die "Caught a signal $!";
}

sleep(100);

关于 signal

The default signal for kill is TERM

control+c will send interrupt signal(SIGINT) to program

参考:

  1. http://perltricks.com/article/37/2013/8/18/Catch-and-Handle-Signals-in-Perl/
  2. https://superuser.com/questions/107543/bash-man-page-kill-pid-vs-kill-9-pid
  3. https://metacpan.org/pod/sigtrap

Perl

这篇文章: 有用 无用
创建 2017-04-16 03:41:41 / 更新 2017-04-16 05:26:18

PostgreSQL的一些基本操作

$ psql database_name -U myuser -h myhost # connect databse

\connect database_name # switch database

\du # list database roles, A role can be thought of as either a database user, or a group of database users, depending on how the role is set up.

\l # list all databases

\d # list all visible tables, views, sequences and foreign tables

\dt # list all tables in the current database

\dp # Lists tables, views and sequences with their associated access privileges

\d+ table_name # describe table structure

\q # exit psql

\x # Sets or toggles expanded table formatting mode. Like MySQL "\G". 

psql -c '\x' -c 'SELECT * FROM foo;'

psql <<EOF
\x
SELECT * FROM foo;
EOF

\password postgres # change password for postgres

参考:


PostgreSQL

这篇文章: 有用 无用
创建 2017-03-16 02:42:47 / 更新 2017-04-26 22:01:01

ProxyChains

使用Linux的时候经常需要下载国外的程序包,有的时候非常慢,有的时候资源被屏蔽,ProxyChains可以完美解决这个问题,当然前提是你得有一个代理

给ProxyChains配置代理:

$ cat .proxychains/proxychains.conf 
[ProxyList]
socks5 127.0.0.1 7090

怎么使用呢? 很简单, 原始命令前面添加proxychains即可:

$ proxychains google-cloud-sdk/install.sh
$ proxychains pip install scrapy
$ proxychains /opt/google/chrome/chrome

翻墙

这篇文章: 有用 无用
创建 2017-02-23 03:28:06 / 更新 2017-02-23 04:27:16

Chrome 如何去重启

  1. 地址栏直接输入: chrome:restart

  2. Chrome menu> Settings> On Startup> Continue where you left off


浏览器

这篇文章: 有用 无用
创建 2017-02-16 04:11:33 / 更新 2017-02-16 04:11:33

Perl 如何更改 @INC

  1. 导入PERL5LIB环境变量

    export PERL5LIB=/home/foobar/lib 
    
  2. 在脚本中使用 use lib

    use lib '/home/foobar/code';
    use My::Module;
    

    有些人也这样:

    BEGIN { unshift @INC, "/home/foobar/code" }
    use My::Module;
    
  3. 执行脚本的时候添加 -I(大写i) 选项

    perl -I /home/foobar/code script.pl
    

以上三种方式都会把 /home/foobar/code 添加到 @INC 的第一个元素

那么如何查看 @INC 呢?

perl -V
perl -e 'print join("\n", @INC), "\n"'

方法1是固定添加到系统 @INC, 方法2,3是执行的时候添加到 @INC


Perl

这篇文章: 有用 无用
创建 2017-02-06 01:35:36 / 更新 2017-02-06 02:14:39