- 论坛徽章:
- 0
|
- #!/usr/bin/perl
- use strict;
- use warnings;
- use POSIX qw(:sys_wait_h);
- $SIG{CHLD} = \&sig_chld;
- sub sig_chld{
- my $pid;
- while (($pid = waitpid(-1, WNOHANG)) > 0) {
- print STDERR "child terminated: $pid\n";
- }
- }
- print "Parent PID: $\n";
- system("sleep 10");
复制代码 记得某unix教程上说的system(2)函数也是fork(2)和execl*(2)的组合(也许是我想当然了,但确实能这样实现)。
也就是说system是在子进程中执行的,等同于if (fork() == 0) {execl*()}了,子进程的状态,当然可以通过waitpid来得到。如上述代码。
执行上述代码,另开一个终端:- ps ax -opid,ppid,comm
- 2163 1936 /usr/bin/perl ./test.pl (perl5.8.9)
- 2164 2163 sleep 10
复制代码 可以看到sleep 10的父进程是test.pl。
而等10秒结束,可以在原来终端窗口看到退出信息:- Parent PID: 2180
- child terminated: 2181
复制代码 你可以通过waitpid来进行一些操作。详情可以仔细看waitpid。 |
|