setpgid() - Unix,Linux系統呼叫 - 技術教學
Tutorials Point


  Unix初學者指南
  Unix Shell程式設計
  高階Unix
  Unix有用參考資料
  Unix有用資源
  精選讀物

版權所有 © 2014 tutorialspoint



  首頁     參考資料     討論論壇     關於TP  

setpgid() - Unix,Linux系統呼叫


previous next AddThis Social Bookmark Button

廣告

名稱

setpgid, getpgid, setpgrp, getpgrp - 設定/獲取程序組

概要

#include <unistd.h>

int setpgid(pid_t pid, pid_t pgid);
pid_t getpgid(pid_t pid);
int setpgrp(void);
pid_t getpgrp(void);

描述

setpgid() 將由pid指定的程序的程序組ID設定為pgid。如果pid為零,則使用當前程序的程序ID。如果pgid為零,則使用由pid指定的程序的程序ID。如果setpgid() 用於將程序從一個程序組移動到另一個程序組(例如,某些shell在建立管道時所做的那樣),則這兩個程序組必須屬於同一個會話。在這種情況下,pgid指定要加入的現有程序組,並且該組的會話ID必須與加入程序的會話ID匹配。

getpgid() 返回由pid指定的程序的程序組ID。如果pid為零,則使用當前程序的程序ID。

呼叫setpgrp() 等效於setpgid(0,0)

類似地,getpgrp() 等效於getpgid(0)。每個程序組都是一個會話的成員,每個程序都是其程序組所屬會話的成員。

程序組用於分發訊號,並由終端來仲裁對其輸入的請求:與終端具有相同程序組的程序位於前臺,可以讀取,而其他程序如果嘗試讀取則會因訊號而阻塞。因此,這些呼叫被諸如csh(1)之類的程式用於在實現作業控制時建立程序組。termios(3)中描述的TIOCGPGRPTIOCSPGRP呼叫用於獲取/設定控制終端的程序組。

如果會話具有控制終端,CLOCAL未設定並且發生掛起,則會話領導者將收到SIGHUP訊號。如果會話領導者退出,則SIGHUP訊號將傳送到控制終端的前臺程序組中的每個程序。

如果程序的退出導致程序組成為孤兒,並且如果新成為孤兒的程序組的任何成員都被停止,則將向新成為孤兒的程序組中的每個程序傳送SIGHUP訊號,然後是SIGCONT訊號。

返回值

成功時,setpgid() 和 setpgrp() 返回零。出錯時,返回 -1,並且errno被相應地設定。

getpgid() 成功時返回一個程序組。出錯時,返回 -1,並且errno被相應地設定。

getpgrp() 始終返回當前程序組。

錯誤

標籤描述
EACCES 嘗試更改呼叫程序的子程序之一的程序組ID,並且子程序已經執行了execve() (setpgid(), setpgrp())。
EINVAL pgid 小於 0 (setpgid(), setpgrp())。
EPERM 嘗試將程序移動到不同會話中的程序組,或更改呼叫程序的子程序之一的程序組ID,並且子程序位於不同會話中,或更改會話領導者的程序組ID (setpgid(), setpgrp())。
ESRCH 對於getpgid():pid與任何程序都不匹配。對於setpgid():pid不是當前程序,也不是當前程序的子程序。

符合標準

函式setpgid() 和 getpgrp() 符合 POSIX.1-2001。函式setpgrp() 來自 4.2BSD。函式getpgid() 符合 SVr4。

註釋

透過fork(2)建立的子程序繼承其父程序的程序組ID。程序組ID在execve(2)中保留。

POSIX 從 BSD 函式setpgrp() 獲取了setpgid()。System V也具有相同名稱的函式,但它與setsid(2)相同。

要在glibc下獲取原型,請同時定義_XOPEN_SOURCE和_XOPEN_SOURCE_EXTENDED,或者對大於或等於500的某個整數n使用“#define _XOPEN_SOURCE n”。

參見



previous next Printer Friendly

廣告


  

廣告



廣告
© . All rights reserved.