restart_syscall

Section: System Calls (2)
Updated: 2026-02-08
Index JM Home Page roff page
 

名前

restart_syscall - 一時停止シグナルによる割り込み後にシステムコールを再開する  

書式

long restart_syscall(void);

注: このシステムコールには、glibc のラッパー関数はない。「注意」の節を参照。  

説明

restart_syscall() システムコールは、 シグナル (SIGSTOP や SIGTSTP など) によって停止されたプロセスが SIGCONT シグナルを受信して再開された後に、 特定のシステムコールを再開するのに使用される。 このシステムコールはカーネル内部での利用のみを想定している。

restart_syscall() is used for restarting only those system calls that, when restarted, should adjust their time-related parameters---namely poll(2) (since Linux 2.6.24), nanosleep(2) (since Linux 2.6), clock_nanosleep(2) (since Linux 2.6), and futex(2), when employed with the FUTEX_WAIT (since Linux 2.6.22) and FUTEX_WAIT_BITSET (since Linux 2.6.31) operations. restart_syscall() restarts the interrupted system call with a time argument that is suitably adjusted to account for the time that has already elapsed (including the time where the process was stopped by a signal). Without the restart_syscall() mechanism, restarting these system calls would not correctly deduct the already elapsed time when the process continued execution.  

返り値

restart_syscall() の返り値は、 再開中のシステムコールの返り値となる。  

エラー

errno は restart_syscall() が再開しているシステムコールのエラーに基づいて設定される。  

標準規格

Linux.  

歴史

Linux 2.6.  

注意

このシステムコールには glibc のラッパー関数はない。 それはカーネルによる利用だけが想定されており、 アプリケーションは決してこのシステムコールを呼び出すべきではない。

カーネルは restart_syscall() を使用することで、 シグナルにより停止されたプロセスが SIGCONT により再開された後にシステムコールが再開される際に、 元のシステムコールに指定されたタイムアウト時間の計算に、 プロセスが停止中に経過した時間が含まれることを保証する。 タイムアウト引数を取り、停止シグナルの後に SIGCONT があった場合自動的に再開するシステムコールだが、 そのシステムコールに restart_syscall() の仕組みが組込まれていない場合には、 プロセスの実行が再開された後、 停止中にプロセスが消費した時間はタイムアウト値としてカウント「されない」。 この問題を持つ有名なシステムコールとしては ppoll(2), select(2), pselect(2) がある。

ユーザー空間からは restart_syscall() の動作はほとんど見えない。 再開されたシステムコールを呼び出したプロセスには、 そのシステムコールが通常通り実行され返ったように見える。  

関連項目

sigaction(2), sigreturn(2), signal(7)


 

Index

名前
書式
説明
返り値
エラー
標準規格
歴史
注意
関連項目

This document was created by man2html, using the manual pages.