Merge pull request #2497 from rhc54/topic/signal
Per discussion on email thread, restore placement of child procs in t…
Этот коммит содержится в:
Коммит
0366f3aedc
@ -1466,7 +1466,7 @@ int orte_odls_base_default_kill_local_procs(opal_pointer_array_t *procs,
|
|||||||
if (NULL == (proc = (orte_proc_t*)opal_pointer_array_get_item(procptr, i))) {
|
if (NULL == (proc = (orte_proc_t*)opal_pointer_array_get_item(procptr, i))) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
for(j=0; j < orte_local_children->size; j++) {
|
for (j=0; j < orte_local_children->size; j++) {
|
||||||
if (NULL == (child = (orte_proc_t*)opal_pointer_array_get_item(orte_local_children, j))) {
|
if (NULL == (child = (orte_proc_t*)opal_pointer_array_get_item(orte_local_children, j))) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
@ -167,6 +167,22 @@ orte_odls_base_module_t orte_odls_default_module = {
|
|||||||
/* deliver a signal to a specified pid. */
|
/* deliver a signal to a specified pid. */
|
||||||
static int odls_default_kill_local(pid_t pid, int signum)
|
static int odls_default_kill_local(pid_t pid, int signum)
|
||||||
{
|
{
|
||||||
|
pid_t pgrp;
|
||||||
|
|
||||||
|
#if HAVE_SETPGID
|
||||||
|
pgrp = getpgid(pid);
|
||||||
|
if (-1 != pgrp) {
|
||||||
|
/* target the lead process of the process
|
||||||
|
* group so we ensure that the signal is
|
||||||
|
* seen by all members of that group. This
|
||||||
|
* ensures that the signal is seen by any
|
||||||
|
* child processes our child may have
|
||||||
|
* started
|
||||||
|
*/
|
||||||
|
pid = pgrp;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
if (0 != kill(pid, signum)) {
|
if (0 != kill(pid, signum)) {
|
||||||
if (ESRCH != errno) {
|
if (ESRCH != errno) {
|
||||||
OPAL_OUTPUT_VERBOSE((2, orte_odls_base_framework.framework_output,
|
OPAL_OUTPUT_VERBOSE((2, orte_odls_base_framework.framework_output,
|
||||||
@ -313,6 +329,10 @@ static int do_child(orte_app_context_t* context,
|
|||||||
long fd, fdmax = sysconf(_SC_OPEN_MAX);
|
long fd, fdmax = sysconf(_SC_OPEN_MAX);
|
||||||
char *param, *msg;
|
char *param, *msg;
|
||||||
|
|
||||||
|
/* Set a new process group for this child, so that any
|
||||||
|
* signals we send to it will reach any children it spawns */
|
||||||
|
setpgid(0, 0);
|
||||||
|
|
||||||
/* Setup the pipe to be close-on-exec */
|
/* Setup the pipe to be close-on-exec */
|
||||||
opal_fd_set_cloexec(write_fd);
|
opal_fd_set_cloexec(write_fd);
|
||||||
|
|
||||||
@ -717,4 +737,3 @@ static int orte_odls_default_restart_proc(orte_proc_t *child)
|
|||||||
}
|
}
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Загрузка…
x
Ссылка в новой задаче
Block a user