任务:如果父进程终止,则自动终止所有子进程.父进程不仅可以以正确的方式终止,还可以通过在ProcessExplorer中进行终止来终止.我该怎么做?
在С主题建议中使用Job对象的类似问题.如何在C#中使用它而不导出外部DLL?
我试着使用Job Objects.但是这段代码不能正常工作:
var job = PInvoke.CreateJobObject(null, null);
var jobli = new PInvoke.JOBOBJECT_BASIC_LIMIT_INFORMATION();
jobli.LimitFlags = PInvoke.LimitFlags.JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE
| PInvoke.LimitFlags.JOB_OBJECT_LIMIT_PRIORITY_CLASS
| PInvoke.LimitFlags.JOB_OBJECT_LIMIT_JOB_TIME
| PInvoke.LimitFlags.JOB_OBJECT_LIMIT_DIE_ON_UNHANDLED_EXCEPTION
| PInvoke.LimitFlags.JOB_OBJECT_LIMIT_JOB_MEMORY;
var res = PInvoke.SetInformationJobObject(job, PInvoke.JOBOBJECTINFOCLASS.JobObjectBasicLimitInformation, jobli, 48);
if (!res)
{
int b = PInvoke.GetLastError();
Console.WriteLine("Error " + b);
}
var Prc = Process.Start(...);
PInvoke.AssignProcessToJobObject(job, Prc.Handle);
Run Code Online (Sandbox Code Playgroud)
PInvoke.SetInformationJobObject返回错误.GetLastError返回错误24.但是,PInvoke.AssignProcessToJobObject工作,子进程添加到作业队列(我可以在ProcessExplorer中看到它).但是,因为PInvoke.SetInformationJobObject不起作用 - 当我杀死父节点时,生成的进程保持活动状态.
我在这段代码中有什么不正确的地方?
在Play 1.0中,我们可以定义一些将在后台执行的作业:
@OnApplicatonStart
@Every("1h")
public class DataJob extends Job {
public void doJob() {
// ...
}
}
Run Code Online (Sandbox Code Playgroud)
但我在Play 2.0中找不到它.我错过了什么吗?
我有一个QUARTZ JOB,每10分钟启动一次.
如果JOB未在10分钟内完成,则在接下来的第10分钟,另一个JOB将启动.
我想要的是:如果前一个JOB已经完成运行,则下一个JOB(每10分钟后)应该只启动.有什么办法吗?
因此,我需要以编程方式停止在Sidekiq(3.1.2)中运行的作业,而不是预定的作业.我确实阅读了API文档,但没有找到任何关于取消正在运行的作业的信息.这可能与sidekiq有关吗?
当这不可能直接实现时,我的想法是绕过这个,通过在调用信号时在作业中引发异常,然后从重试集中删除作业.这显然不是最佳选择.
提前致谢
JobScheduler多次调用onStartJob()
,但作业已完成.一切工作正常,如果我安排一个单一的工作,并等到它完成.但是,如果我同时安排两个或多个具有不同ID的作业,则onStartJob()
在调用后再次调用jobFinished()
.
例如,我使用除ID之外的完全相同的参数来安排作业1和作业2,然后顺序为:
onStartJob()
对于工作1和工作2jobFinished()
它们都被调用了onStartJob()
对于具有相同ID的两个作业再次调用它我的工作非常基础而且并不复杂.
public class MyJobService extends JobService {
@Override
public boolean onStartJob(final JobParameters params) {
new Thread(new Runnable() {
@Override
public void run() {
try {
// do something
} finally {
// do not reschedule
jobFinished(params, false);
}
}
}).start();
// yes, job running in the background
return true;
}
@Override
public boolean onStopJob(JobParameters params) {
// mark my background task as stopped
// …
Run Code Online (Sandbox Code Playgroud) 我正在用怪异的行为jobs
,fg
并bg
在我的zsh shell命令.这是一个例子(这适用于所有命令,而不仅仅是python
):
$ python &
[1] 21214
Python 2.7.8 (default, Oct 19 2014, 16:02:00)
[GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.54)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
[1] + 21214 suspended (tty output) python
$ jobs
[1] + suspended (tty output) python
$ fg 1
fg: job not found: 1
$ bg 1
bg: job not found: 1
Run Code Online (Sandbox Code Playgroud)
我在OS X上使用标准的oh-my-zsh安装.
在k8s中,Cron Job Limitations提到无法保证作业只执行一次:
cron作业在其计划的每个执行时间创建一个作业对象.我们说"约",因为在某些情况下可能会创建两个作业,或者不会创建任何作业.我们试图使这些罕见,但不要完全阻止它们.因此,工作应该是幂等的
谁能解释一下:
我有一个在AWS EC2上运行的网站.我需要创建一个夜间作业,生成站点地图文件并将文件上传到各种浏览器.我在AWS上寻找一个允许此功能的实用程序.我考虑过以下几点:
1)生成对Web服务器的请求,以触发它执行此任务
2)在运行Web服务器的计算机上创建一个cron作业以执行此任务
3)创建另一个EC2实例并设置一个cron作业来运行该任务
还有其他选择吗?这是ElasticMapReduce的工作吗?
我有以下bash脚本,我们可以调用它script1.sh
:
#!/bin/bash
exec ./script2.sh &
sleep 5
if job1 is alive then #<--- this line is pseudo-code!
exec ./script3.sh &
wait
fi
Run Code Online (Sandbox Code Playgroud)
可以看出,脚本script2.sh
作为后台作业执行,然后等待5秒(这样script2.sh
可以做一些初始化的事情).如果初始化成功,script2.sh
作业仍然存活,在这种情况下我也想同时启动script3.sh
; 如果没有,我只是想退出.
但是,我不知道如何检查第一个作业是否存活,因此伪代码行.那么,它应该取而代之的是什么?
我正在尝试给孩子进程(通过fork()
)前台访问终端.
在我之后fork()
,我在子进程中运行以下代码:
setpgid(0, 0);
Run Code Online (Sandbox Code Playgroud)
和:
setpgid(child, child);
Run Code Online (Sandbox Code Playgroud)
在父进程中.
这为孩子提供了自己的过程组.呼叫setpgid()
正常工作.
现在我想让孩子访问终端.
我在setpgid()
电话会议后给孩子添加了以下内容:
if (!tcsetpgrp(STDIN_FILENO, getpid())) {
perror("tcsetpgrp failed");
}
Run Code Online (Sandbox Code Playgroud)
之后,有一个execv()
命令产生/usr/bin/nano
.
然而,nano
没有发生任何事情,终端看起来好像它期待用户输入.
此外,tcsetpgrp()
呼叫后似乎没有代码执行.
我在某处读到了我需要向SIGCONT
子进程发送信号以使其工作.如果该过程停止,我该怎么办?父母是否必须发送信号?
SIGCONT
如果这是解决方案,我该如何发送信号?
raise(SIGCONT);
Run Code Online (Sandbox Code Playgroud)
此外,我不确定这是否有帮助,但代码工作正常,并生成nano
如果我运行我的程序:
exec ./program
Run Code Online (Sandbox Code Playgroud)
代替:
./program
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?非常感谢!
jobs ×10
process ×3
bash ×2
cron ×2
amazon-ec2 ×1
android ×1
background ×1
c ×1
c# ×1
cancellation ×1
foreground ×1
java ×1
kubernetes ×1
shell ×1
sidekiq ×1
signals ×1
terminate ×1
termination ×1
zsh ×1