标签: jobs

父进程在C#中终止时如何终止子进程

任务:如果父进程终止,则自动终止所有子进程.父进程不仅可以以正确的方式终止,还可以通过在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不起作用 - 当我杀死父节点时,生成的进程保持活动状态.

我在这段代码中有什么不正确的地方?

c# jobs termination process terminate

16
推荐指数
3
解决办法
2万
查看次数

Play 2.0中的工作支持在哪里?

Play 1.0中,我们可以定义一些将在后台执行的作业:

@OnApplicatonStart
@Every("1h")
public class DataJob extends Job {
    public void doJob() {
       // ...
    }
}
Run Code Online (Sandbox Code Playgroud)

但我在Play 2.0中找不到它.我错过了什么吗?

jobs playframework-2.0

16
推荐指数
3
解决办法
1万
查看次数

如何设置为QUARTZ JOB仅在另一个JOB完成时启动,停止?

我有一个QUARTZ JOB,每10分钟启动一次.

如果JOB未在10分钟内完成,则在接下来的第10分钟,另一个JOB将启动.

我想要的是:如果前一个JOB已经完成运行,则下一个JOB(每10分钟后)应该只启动.有什么办法吗?

java jobs quartz-scheduler

15
推荐指数
1
解决办法
1万
查看次数

Sidekiq停止一个单一的,正在运行的工作

因此,我需要以编程方式停止在Sidekiq(3.1.2)中运行的作业,而不是预定的作业.我确实阅读了API文档,但没有找到任何关于取消正在运行的作业的信息.这可能与sidekiq有关吗?

当这不可能直接实现时,我的想法是绕过这个,通过在调用信号时在作业中引发异常,然后从重试集中删除作业.这显然不是最佳选择.

提前致谢

jobs cancellation sidekiq

15
推荐指数
2
解决办法
2万
查看次数

Android JobScheduler onStartJob多次调用

JobScheduler多次调用onStartJob(),但作业已完成.一切工作正常,如果我安排一个单一的工作,并等到它完成.但是,如果我同时安排两个或多个具有不同ID的作业,则onStartJob()在调用后再次调用jobFinished().

例如,我使用除ID之外的完全相同的参数来安排作业1和作业2,然后顺序为:

  1. onStartJob() 对于工作1和工作2
  2. 两个作业都完成了,所以jobFinished()它们都被调用了
  3. 之后,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 android job-scheduling

15
推荐指数
1
解决办法
5621
查看次数

zsh中奇怪的"工作"行为

我正在用怪异的行为jobs,fgbg在我的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安装.

bash jobs zsh

15
推荐指数
1
解决办法
3338
查看次数

为什么在kubernetes cron job中可能会创建两个作业,或者可能没有创建作业?

在k8s中,Cron Job Limitations提到无法保证作业只执行一次:

cron作业在其计划的每个执行时间创建一个作业对象.我们说"约",因为在某些情况下可能会创建两个作业,或者不会创建任何作业.我们试图使这些罕见,但不要完全阻止它们.因此,工作应该是幂等的

谁能解释一下:

  • 为什么会这样?
  • 这可能发生的概率/统计数据是什么?
  • 它将在k8s的某个合理的未来被修复吗?
  • 是否有任何变通办法来防止这种行为(如果正在运行的作业不能实现为幂等)?
  • 其他与cron相关的服务遭遇同样的问题吗?也许这是一个核心的cron问题?

cron jobs distributed-computing kubernetes

15
推荐指数
1
解决办法
1399
查看次数

在AWS EC2上安排作业

我有一个在AWS EC2上运行的网站.我需要创建一个夜间作业,生成站点地图文件并将文件上传到各种浏览器.我在AWS上寻找一个允许此功能的实用程序.我考虑过以下几点:

1)生成对Web服务器的请求,以触发它执行此任务

  • 我不喜欢这种方法,因为它占用服务器线程并在主机上使用cpu周期

2)在运行Web服务器的计算机上创建一个cron作业以执行此任务

  • 同样,我不喜欢这种方法,因为它需要cpu周期远离Web服务器

3)创建另一个EC2实例并设置一个cron作业来运行该任务

  • 这解决了Web服务器资源问题,但为什么要支付额外的EC2实例来运行作业<5分钟?浪费钱!

还有其他选择吗?这是ElasticMapReduce的工作吗?

cron jobs amazon-ec2 amazon-web-services elastic-map-reduce

14
推荐指数
2
解决办法
2万
查看次数

如何检查后台作业是否还活着?(bash)的

我有以下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; 如果没有,我只是想退出.

但是,我不知道如何检查第一个作业是否存活,因此伪代码行.那么,它应该取而代之的是什么?

bash shell jobs background process

14
推荐指数
4
解决办法
2万
查看次数

如何让tcsetpgrp()在C中工作?

我正在尝试给孩子进程(通过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)

有任何想法吗?非常感谢!

c jobs signals process foreground

13
推荐指数
2
解决办法
1万
查看次数