我在一台Linux主机上运行一个perl脚本。我正在尝试编写一个fork脚本,其中子进程启动一个程序,而父进程在5秒后超时,从而杀死子进程。这就是我所拥有的:
my $start = time();
my $timeOut = 5;
my $childPid = fork();
if ($childPid) {
# I am the parent, and $childPid is my child
while (kill(0, $childPid)) {
if (time() > $start + $timeOut) {
$nu
我正在尝试创建一个perl模块来ping (使用linux系统ping)数百台主机,并获取ping的数据(如数据包丢失、传输了多少数据包和接收了多少数据包等)。从每个主机的stdout。我使用了AnyEvent::Util fork_call,但是我被卡住了,因为它不能收集标准输出。我已经创建了一个小脚本来演示我想要做的事情:
#!/usr/bin/perl
use strict;
use warnings;
use AnyEvent;
use AnyEvent::Util 'fork_call';
use DDP;
my $cv = AE::cv;
my @hosts
我实际上创建了一个脚本,其中fork()创建了一个在后台运行的子进程,并使用它的进程ID检查主脚本(父进程)在前台运行的时间周期。如果主脚本(父进程)超过阈值时间,那么将采取操作/s。
在Linux中,它的实现是因为INIT进程在主脚本(父进程)被杀死或完成后成为活动子进程(孤立进程)的父进程。
但是,我无法在中实现它,因为父-子体系结构不同于Linux.。
Perl语言下的相同代码(在Linux中)的简短代码是:
sub run_sleep {
my $pid = fork(); ## Here, $pid var. will have child process PID for
当使用Perl执行fork()时,创建的子进程和父进程将写入同一个日志文件,因此脚本将卡在windows.中。
我希望子进程写入不同的日志文件,而父进程写入不同的日志文件,这样就不会出现因为两个进程同时写入同一个文件而陷入停滞的问题。
脚本代码片段:
print "I am parent process";
my $var2=&run_sleep();
print " I am out of subroutine";
print "I want to write in different log file";
sub run_sl
任何人都可以告诉我为什么这段代码能顺利运行的巨大奥秘:
#!/usr/bin/perl
my $papa = $$;
my $pid;
$pid = fork;
die "Fork call has failed: $!" unless defined $pid;
if ($pid) {
# Dad code
while (1) {
print "Fix your room Charlie\n";
sleep(1);
}
} else {
# Child code
for ( my $
我的目的是使用不同的路径作为参数来执行long.pl perl脚本,而且由于long.pl有不确定的循环,所以在主脚本中它不会出现第二个路径。我想用fork来做这件事,但我不确定它是否能解决我的问题!
关于完成这项任务的方法的一些信息是有帮助的,如果你需要澄清问题说明,请告诉我。
#!/usr/bin/perl
use strict;
use warnings;
print localtime () . ": Hello from the parent ($$)!\n";
my @paths = ('C:\Users\goudarsh\Desktop\Perl_te
我在Linux平台上使用Perl。首先,我创建了一个线程,并在这个新线程中派生了一个子进程。当新线程中的父进程返回并加入主线程时,我想向在创建的线程中产生的子进程发送TERM信号,但信号处理程序不起作用,子进程变成僵尸。下面是我的代码:
use strict;
use warnings;
use Thread 'async';
use POSIX;
my $thrd = async {
my $pid = fork();
if ($pid == 0) {
$SIG{TERM} = \&child_exit;
`echo
在Perl中,是否可以确定一个脚本是否正在另一个脚本中执行(可能是通过system或qx)?
$ cat foo.pl
print "foo";
print "\n" if not $in_qx; # or the like.
我意识到如果脚本是通过exec运行的,那么这是不适用的。
我知道system是作为fork运行进程的,我知道fork可以返回一个可变的值,这取决于您是在父进程还是子进程中。对qx不是很确定。
无论如何,如果不实际执行fork,我不确定如何确定我是否处于forked进程中。
根据甲骨文的,在信号处理程序内部使用fork()应该是安全的.但是我的进程被卡在信号处理程序中,并跟踪跟踪:
#0 __lll_lock_wait_private () at ../nptl/sysdeps/unix/sysv/linux/x86_64/lowlevellock.S:95
#1 0x00007f86e6a9990d in _L_lock_48 () from /lib/x86_64-linux- gnu/libc.so.6
#2 0x00007f86e6a922ec in ptmalloc_lock_all () at arena.c:242
#3 0x00
我有一个通过Net::Server模块运行TCP侦听器的perl脚本。当遥控器连接到perl服务器时,遥控器会发送mp3音乐文件的文件名进行播放。当我使用fork()然后调用system('mpg123 $filename')时,客户端挂起了。如何对mpg123进程进行后台操作,以便子进程可以关闭连接?
my $pid = fork();
if (defined $pid && $pid == 0)
{
# child process -- never gets to print statement until $c
在此之前,谢谢你收看和回答我的问题。
我正在看linux内核的代码,特别是linux/ code /kthread.c。
在文件中,有一个函数tsk_fork_get_node,如下所示
/* called from do_fork() to get node information for about to be created task */
int tsk_fork_get_node(struct task_struct *tsk)
{
#ifdef CONFIG_NUMA
if (tsk == kthreadd_task)
return tsk->pref
嗨,我正在做一个关于编译内核的项目。然而,我正面临一个错误,它说
fork.c: In function `do_fork':
fork.c:764: request for member `list' in something not a structure or union
简要说明:我正在使用一个现成的链表,它是在内核中为每种类型的结构定义的。(所以我有自己的数据结构)此外,我为我的链表使用了预定义的函数,如添加,遍历,删除节点,但由于这个错误,我不能有任何进展。在这里你可以看到包含我的数据结构的头文件。
/* project_header.h> */
#ifnde
问题是如何按照字母顺序在Linux上使用C的叉()创建一个进程树:
A: B, C, D
-B: E, F
-C: G
--G: I
-D:
目前,通过使用if,我可以通过观察htop中的PID来查看abcdeGFi,而不是正确的顺序。
看到C的PID (目前)总是B的PID + 1,所以我试着在分叉B之前停止C,然后继续C:
int b = getpid();
kill(b + 1, SIGSTOP);
fork(); /* E created */
if (getpid() == b) {
fork(); /* F created */
我在perl中使用fork和CGI::Fast。
当我正常运行它时,它会像预期的那样打印5次In handle request。
但是当我在apache服务器中将这个文件配置为快速cgi时,它只打印In handle request一次。
有人能帮帮我吗。
示例程序:
#!/usr/bin/perl
use strict;
use warnings;
use CGI::Fast;
use Data::Dumper;
use HTML::Template;
while(my $query = CGI::Fast->new()) {
my $timeout ='60
perl模块安装正在出错。
使用-Dinstallprefix选项在非标准位置安装Perl5.32.1
./Configure -Dinstallprefix=/test/user/home/perl -des
make
make test
make install
/test/user/home/perl/bin/perl -version
This is perl 5, version 32, subversion 1 (v5.32.1) built for x86_64-linux
设置PERL5LIB env变量
export PERL5LIB="/test/user/hom
我一直在使用Perl的SSH包连接到我的RHEL系统。最近,我将我的一个VM升级为redhat-release 7.2-9.el7.x86_64。现在,当我运行Perl脚本时,它抛出了错误:
无法在/usr/local/ line 64/Perl 5/Net/SSH/Perl/kex.pm第107行找到通过包"Net::SSH::Perl::Kex::C25519“的对象方法"exchange”。当生成ssh对象时。
在我的6.8RHEL版本上,同样的脚本也在运行。有什么建议吗?
以下是代码:
#!/usr/local/bin/perl
use strict;
use