Perl系统(命令)然后kill命令
我正在尝试输出系统 netstat -an -p TCP $interval > $log
睡眠 $秒,然后退出/终止 netstat 命令,但无法使其正常工作。
如果我使用 start netstat...
,我的 sleep 和 Kill 命令可以工作,但不会写入日志。
如果我只使用 netstat...
,那么它会写入日志,但不会继续执行 sleep 和 Kill 命令。
关于如何解决这个问题有什么想法吗?
$netstat_cmd = "netstat -an -p TCP $interval >$netstatlog;
$stop_netstat_cmd = "c:\utilities\pskill NETSTAT.exe";
system($netstat_cmd);
sleep $seconds;
system "$stop_netstat_cmd";
谢谢!
I'm trying to output a system netstat -an -p TCP $interval > $log
for a sleep of $seconds, and then quit/kill the netstat command but am having trouble getting it to work correctly.
If I use start netstat...
, my sleep and kill commands work, but it does not write to the log.
If I only use netstat...
, then it writes to the logs, but will not move on to the sleep and kill commands.
Any ideas on how to solve this??
$netstat_cmd = "netstat -an -p TCP $interval >$netstatlog;
$stop_netstat_cmd = "c:\utilities\pskill NETSTAT.exe";
system($netstat_cmd);
sleep $seconds;
system "$stop_netstat_cmd";
Thanks!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
为什么不使用
IPC::Run
?它有一个可跨 Unix 和 Win32 移植的kill_kill()
方法(如果您在 Windows 上运行,则后者很重要,正如您的“start”似乎可能表明的那样)。就您自己的方法而言,
start xxx
重定向不起作用,因此最简单的修复方法是:创建一个批处理文件来运行netstat并重定向到文件
使用
start
启动批处理文件Why don't you use
IPC::Run
? It has akill_kill()
method that is portable across Unix and Win32 (the latter is important if you're running on Windows as your "start" seems to possibly indicate).As far as your own approach, the
start xxx
redirect doesn't work, so the easiest fix is to:Create a batch file to run netstat and redirect to a file
Launch the batch file with
start
你的麻烦是 system() 运行它的命令并等待它返回,所以你永远不会调用 sleep() 。您需要从另一个进程或在后台运行 netstat。您可以使用 fork() 来实现这一点,方法是从主进程中生成另一个进程,然后运行 netstat:(
我没有 pskill,所以您必须自己使该部分工作...)
Your trouble is that system() runs its command and waits for it to return, so you never get as far as calling sleep(). You need to run netstat from another process, or in the background. You can use fork() to acheive this, by spawning another process from your main process, and having that run netstat:
(I don't have pskill, so you'll have to make that part work by yourself...)
Forks::Super
使此类任务变得简单为你。Forks::Super
makes this kind of task easy for you.