waitpid - 第一个参数pid = -1和pid = 0之间的差异

时间:2016-03-14 02:05:06

标签: linux unix waitpid

我正在阅读有关controls = selector.xpath('//input[@name="mp"]') if controls: pageNum = int(controls[0].attrib['value']) 功能的http://www.tutorialspoint.com/unix_system_calls/waitpid.htm。它说的是关于第一个参数pid,

import React from 'react';
import { Button, Input } from 'react-bootstrap';

export class BootstrapForm extends React.Component {

  constructor() {
    super();
    this.clearForm = this.clearForm.bind(this);
    this.handleSave = this.handleSave.bind(this);
  }

  clearForm() {
    const fields = ['firstName', 'lastName', 'email'];
    fields.map(field => {
      this.refs[field].refs['input'].value = '';
    });
  }

  handleSubmit() {
    // Handle submitting the form
  }

  render() {
    return (
      <div>
        <form>
          <div>
            <Input
              ref='firstName'
              type='text'
              label='First Name'
              placeholder='Enter First Name'
            />
            <Input
              ref='lastName'
              type='text'
              label='Last Name'
              placeholder='Enter Last Name'
            />
            <Input
              ref='email'
              type='email'
              label='E-Mail'
              placeholder='Enter Email Address'
            /> 
            <div>
              <Button bsStyle={'success'} onClick={this.handleSubmit}>Submit</Button>
              <Button onClick={this.clearForm}>Clear Form</Button>
            </div>
          </div>
        </form>
      </div>
    );
  }
}

我可以知道“任何儿童过程”是什么意思,任何儿童过程是谁?需要什么样的情况才能使用值-1?

2 个答案:

答案 0 :(得分:1)

忽略您的进程具有pid 1的情况(在某些进程名称空间中 - 在这种情况下,孤立进程将被重新分配),0-1之间只有一个区别。

使用-1,任何孩子都会等待。使用0时,不会等待调用setpgid的孩子。

“child”被定义为fork从你的进程创建的进程(但不是来自任何孩子 - 你不能等待孙子,虽然在Linux上我你可以做点什么类似于民意调查/proc/<pid>)。请注意,execve 会影响任何内容。

答案 1 :(得分:0)

通过“任何子进程”,它表示任何进程调用waitpid的进程的子进程。

如果您想等待任何一个孩子,可以使用-1的pid参数。最常见的用途可能是当您有多个孩子并且您知道至少有一个孩子因为您收到SIGCHLD而退出。您想为已退出的每个孩子打电话waitpid,但您不确切知道哪些已退出。所以你这样循环:

while (1) {
    int status;
    pid_t childPid = waitpid(-1, &status, WNOHANG);
    if (childPid <= 0) {
        break;
    }

    // Do whatever you want knowing that the child with pid childPid
    // exited. Use status to figure out why it exited.
}