在bash脚本中,我想执行以下操作(在伪代码中):
if [ a process exists with $PID ]; then
kill $PID
fi
Run Code Online (Sandbox Code Playgroud)
条件语句的恰当表达式是什么?
根据端口号查找进程并将其全部删除.
ps -efl | grep PORT_NUMBER | kill -9 process_found_previously
Run Code Online (Sandbox Code Playgroud)
如何完成最后一栏?
我有一个长期运行的BASH脚本,我在Windows上运行CYGWIN.
我想限制脚本运行30秒,如果超过此限制则自动终止.理想情况下,我希望能够对任何命令执行此操作.
例如:
sh-3.2$ limittime -t 30 'myscript.sh'
Run Code Online (Sandbox Code Playgroud)
要么
sh-3.2$ limittime -t 30 'grep func *.c'
Run Code Online (Sandbox Code Playgroud)
在cygwin下,ulimit命令似乎不起作用.
我对任何想法持开放态度.
参考代码 :
ProcessBuilder ps4;
Process pr4 = null;
String batchFile3 = new File(path + "/src/example.sh");
ps4 = new ProcessBuilder(batchFile3.getAbsolutePath());
ps4.redirectErrorStream(true);
ps4.directory(new File(path + "/src/"));
pr4 = ps4.start();
BufferedReade readRun = new BufferedReader(new InputStreamReader(pr4.getInputStream()));
if(pr4.waitFor()==0)
{
}
String line,stre;
while ((line = readRun.readLine()) != null) {
System.out.print("-----" + line);
if (line != null) {
stre += line;
}
}
Run Code Online (Sandbox Code Playgroud)
在这里我得到了stre字符串,它可能是错误或由我正在执行的批处理文件生成的输出.
我想停止批处理文件的执行,如果需要花费4-5秒来执行批处理文件执行过程.
同样在这种情况下,我应该能够返回程序来处理一个块,只有在处理批处理文件的这种延迟发生时,才会执行该块,否则不应该处理该块.
假设我有一个bash脚本(foo.sh),它以非常简化的形式,如下所示:
echo "hello"
sleep 100 &
ps ax | grep sleep | grep -v grep | awk '{ print $1 } ' | xargs kill -9
echo "bye"
Run Code Online (Sandbox Code Playgroud)
第三行模仿pkill,默认情况下我在Mac OS X上没有,但您可以将其视为相同pkill.但是,当我运行此脚本时,我得到以下输出:
hello
foo: line 4: 54851 Killed sleep 100
bye
Run Code Online (Sandbox Code Playgroud)
如何抑制中间的线条以便我所看到的是hello和bye?
我有以下内容:
kill -9 `ps aux | grep php | awk '$9 !~ /[0-9]:[0-9]/' | awk '{print $2}'`
Run Code Online (Sandbox Code Playgroud)
它的作用是杀死fcgid遗弃的进程并将其杀死以释放RAM.我想每小时将它作为一个cron运行,但是想要杀掉一小时以前的进程.我只是不确定如何修改脚本来做到这一点.