web-dev-qa-db-ja.com

pid $$を指定してプロセスの終了をリッスンします

Pidを持っているとしましょう、mypid=$$

指定されたpidでそのプロセスの終了をリッスンするために使用できるbash /システムコマンドはありますか?

Mypidのプロセスが存在しない場合、コマンドは単に失敗するはずです。

14
Alexander Mills

私はこの答えから必要なものを手に入れました: https://stackoverflow.com/a/41613532/1223975

.. wait <pid>は、そのpidが現在のプロセスの子プロセスである場合にのみ機能します

ただし、以下はすべてのプロセスで機能します。

プロセスが完了するのを待つ

Linux:

tail --pid=$pid -f /dev/null

ダーウィン($pidには開いているファイルがあります):

lsof -p $pid +r 1 &>/dev/null

タイムアウトあり(秒)

Linux:

timeout $timeout tail --pid=$pid -f /dev/null

ダーウィン($pidには開いているファイルがあります):

lsof -p $pid +r 1m%s -t | grep -qm1 $(date -v+${timeout}S +%s 2>/dev/null || echo INF)
19
Alexander Mills

組み込みのbash waitを使用できます。

_$ sleep 10 &
[2] 28751
$ wait 28751
[2]-  Done                    sleep 10
$ help wait
wait: wait [-n] [id ...]
    Wait for job completion and return exit status.

    Waits for each process identified by an ID, which may be a process ID or a
    job specification, and reports its termination status.  If ID is not
    given, waits for all currently active child processes, and the return
    status is zero.  If ID is a a job specification, waits for all processes
    in that job's pipeline.

    If the -n option is supplied, waits for the next job to terminate and
    returns its exit status.

    Exit Status:
    Returns the status of the last ID; fails if ID is invalid or an invalid
    option is given.
_

システムコールwaitpid()を使用します。

_$ whatis waitpid
waitpid (2)          - wait for process to change state
_
3
Derek Callaway