我在perl中创建了一个脚本来运行超时的程序.如果正在执行的程序需要更长的时间,那么超时将比脚本终止该程序并返回消息"TIMEOUT".
脚本工作得很好,直到我决定重定向执行程序的输出.
当stdout和stderr被重定向时,脚本执行的程序没有被杀死,因为它的pid与我从fork获得的pid不同.
似乎perl执行一个shell,在重定向的情况下执行我的程序.
我想有输出重定向但仍能够在超时的情况下终止程序.
有关如何做到这一点的任何想法?
我的脚本的简化代码是:
#!/usr/bin/perl
use strict;
use warnings;
use POSIX ":sys_wait_h";
my $timeout = 5;
my $cmd = "very_long_program 1>&2 > out.txt";
my $pid = fork();
if( $pid == 0 )
{
exec($cmd) or print STDERR "Couldn't exec '$cmd': $!";
exit(2);
}
my $time = 0;
my $kid = waitpid($pid, WNOHANG);
while ( $kid == 0 )
{
sleep(1);
$time ++;
$kid = waitpid($pid, WNOHANG);
print "Waited $time sec, result $kid\n";
if ($timeout > 0 && …Run Code Online (Sandbox Code Playgroud) 如果你有一个Android应用程序有多个活动,活动A启动B,所以如果活动b崩溃,该过程被杀死但由Android操作系统恢复并再次启动活动A而不是仅仅关闭应用程序,为什么?
我目前正在使用每小时运行的硒RC自动化测试.一切都运行顺利,但有时候火狐会崩溃或硒RC只会挂起,因为这两个问题,测试不会继续,而且会停滞不前.有谁知道如何使firefox.exe和/或java.exe(selenium实例)在崩溃或挂起时被杀死,因此测试可以恢复.我看到的问题是当firefox或selenium挂起时自动检测并自动通过脚本将其杀死.
谢谢!
使用#有很多好的 理由!在/ usr/bin中/ env的.底线:它使您的代码更具可移植性.好吧,有点儿.看一下这个....
我有两个几乎相同的脚本, bintest.py
#! /usr/bin/python
import time
time.sleep(5*60)
Run Code Online (Sandbox Code Playgroud)
和 envtest.py
#! /usr/bin/env python
import time
time.sleep(5*60)
Run Code Online (Sandbox Code Playgroud)
请注意,他们只是在他们的shebangs不同.
bintest.py 按预期运行
br@carina:~$ ./bintest.py & ps && killall bintest.py [1] 15061 PID TTY TIME CMD 14625 pts/0 00:00:00 bash 15061 pts/0 00:00:00 bintest.py 15062 pts/0 00:00:00 ps br@carina:~$ [1]+ Terminated ./bintest.py
但envtest.py做的事情不是最优的
br@carina:~$ ./envtest.py & ps && killall envtest.py [1] 15066 PID TTY TIME CMD 14625 pts/0 00:00:00 bash 15066 pts/0 00:00:00 python 15067 …
如何使用Delphi杀死其他机器(通过网络)的运行进程?
如何在不杀死eclipse中启动的应用程序的情况下退出Eclipse?我知道在调试模式下启动的应用程序与Eclipse有一个网络链接,但在发布模式下启动的应用程序应该没有问题.但是,无论我如何结束eclipse(甚至杀死进程)都会在几秒钟后杀死已启动的应用程序,无论这些程序中的重要未保存数据如何.
动机?可以是任何:eclipse内部错误请求重启,需要释放更多内存(eclipse是330MiB),由进程资源管理器意外杀死.
在终止风暴拓扑之前如何调用特定方法。
我已经在风暴中创建了一个拓扑,我想在拓扑被杀死之前调用特定的方法。
在Storm框架中是否有任何预定义的替代方法或任何可用的方法来做到这一点。
提前致谢:)
客户端完成后,该过程将自动关闭。我想在服务器端执行相同的操作,因为我想使某些进程自动化,但是服务器端完成但仍保持打开状态。
我的mongoDB总是在没有被访问的几个小时内收到KILL信号,我不知道原因.
我正在使用:
SO:Ubuntu 16.04,512MB内存.
在pm2中运行节点7.5.0.
MongoDB版本3.4.1
状态mongod:
mongod.service - High-performance, schema-free document-oriented database
Loaded: loaded (/lib/systemd/system/mongod.service; enabled; vendor preset: enabled)
Active: failed (Result: signal) since Fri 2017-06-02 06:25:06 BRT; 9h ago
Docs: https://docs.mongodb.org/manual
Process: 1334 ExecStart=/usr/bin/mongod --quiet --config /etc/mongod.conf (code=killed, signal=KILL)
Main PID: 1334 (code=killed, signal=KILL)
May 29 19:12:16 admin systemd[1]: Started High-performance, schema-free document-oriented database.
Jun 02 06:25:06 admin systemd[1]: mongod.service: Main process exited, code=killed, status=9/KILL
Jun 02 06:25:06 admin systemd[1]: mongod.service: Unit entered failed state.
Jun 02 06:25:06 …Run Code Online (Sandbox Code Playgroud) 我正在键入一个小的bash脚本,它应该克隆一个git存储库,签出一个特定的硬编码分支并监听一些新的提交.如果发现新的提交,脚本应该杀死正在运行的'MyApp'实例,执行git pull并最终使用gradle构建它.它也应该再次通过gradle开始.
是的,它是一个带有gradle构建文件的java应用程序.
这是我的代码:
##!/bin/bash
# GitHub Repository and Paths
GLOBAL_REPOSITORY="..."
LOCAL_REPOSITORY="..."
# Go to the repository
cd $LOCAL_REPOSITORY
# Clone the git repository if not already done
if [ ! -d "$LOCAL_REPOSITORY/.git" ]
then
git clone $GLOBAL_REPOSITORY $LOCAL_REPOSITORY
git checkout dev
fi
# Pull and build if there are new commits
LAST_GLOBAL_COMMIT=""
LAST_LOCAL_COMMIT=""
CHILDS_PID=""
while true; do
git fetch origin
LAST_GLOBAL_COMMIT="$(git rev-parse origin/dev)"
LAST_LOCAL_COMMIT="$(git rev-parse dev)"
if [ "$LAST_GLOBAL_COMMIT" != "$LAST_LOCAL_COMMIT" ]
then
if [ "$CHILDS_PID != "" ] …Run Code Online (Sandbox Code Playgroud)