#访问控制

进程控制之用户标识

任一进程都可以得到其实际和有效用户ID及组ID。但是有时希望找到运行该程序的用户登录名。我们可以调用getpwuid(getuid()),但是如果一个用户有多个登录名,这些登录名又对应着同一个用户ID,那么又将如何呢?(一个人在口令文件中可以有多个登录项,它们的用户ID相同,但登录shell则不同。)系统通常记录用户登...
代码星球 ·2021-02-21

进程控制之进程会计

大多数UNIX系统提供了一个选项以进行进程会计(processaccounting)处理。启用该选项后,每当进程结束时内核就写一个会计记录。典型的会计记录包含总量较小的二进制数据,一般包括命令名、所使用的CPU时间总量、用户ID和组ID、启动时间等。函数(acct)用于启用和禁用进程会计。唯一使用这一函数的命令是acc...
代码星球 ·2021-02-21

Linux中的终端、控制台、tty、pty等概念

参考:http://news.newhua.com/news1/program_language/2010/623/10623141048745773199BCF0CFH6AKB9930IGCFKHBH4IBE65IDFI07F.html?lt=common     基...

进程控制之system函数

ISOC定义了system函数,但是其操作对系统的依赖性很强。POSIX.1包括了system接口,它扩展了ISOC定义,以描述system在POSIX.1环境中的运行行为。#include<stdlib.h>intsystem(constchar*cmdstring);如果cmdstring是一个空指针,...
代码星球 ·2021-02-21

进程控制之解释器文件

所有现今的UNIX系统都支持解释器文件(interpreterfile)(也可称为解释器脚本)。这种文件是文本文件,其起始行格式是:#!pathname[optional-argument]感叹号和pathname之间的空格是可选的。最常见的解释器文件以下列行开始:#!/bin/shpathname通常是绝对路径名,对...

进程控制之更改用户ID和组ID

在UNIX系统中,特权(例如能改变当前日期的表示法以及访问控制(例如,能否读、写一特定文件))是基于用户ID和组ID的。当程序需要增加特权,或需要访问当前并不允许访问的资源时,我们需要更换自己的用户ID或组ID,使得新ID具有合适的特权或访问权限。与此类似,当程序需要降低其特权或阻止对某些资源的访问时,也需要更换用户I...

进程控制之exec函数

用fork函数创建子进程后,子进程往往要调用一种exec函数以执行另一个程序。当进程调用一种exec函数时,该进程执行的程序完全替换为新程序,而新程序则从其main函数开始执行。因为调用exec并不创建新进程,所以前后的进程ID并未改变。exec只是用一个全新的程序替换了当前进程的正文、数据、堆和栈段。有6种不同的ex...
代码星球 ·2021-02-21

进程控制之竞争条件

当多个进程都企图对共享数据进行某种处理,而最后的结果又取决于进程运行的顺序时,则我们认为这发生了竞争条件(racecondition)。如果在fork之后的某种逻辑显式或隐式地依赖于在fork之后是父进程先运行还是子进程先运行,那么fork函数就会是竞争条件活跃的滋生地。通常,我们不能预料哪一个进程先运行。即使知道哪一...
代码星球 ·2021-02-21

进程控制之wait3和wait4函数

大多数UNIX系统实现提供了另外两个函数wait3和wait4。它们提供的功能比POSIX.1函数wait、waitpid和waitid所提供的功能要多一个,这与附加参数rusage有关。该参数要求内核返回由终止进程及其所有子进程使用的资源汇总。#include<sys/types.h>#include&l...

进程控制之waitid函数

SingleUNIXSpecification的XSI扩展包括了另一个取进程终止状态的函数——waitid,此函数类似于waitpid,但提供了更多的灵活性。#include<sys/wait.h>intwaitid(idtype_tidtype,id_tid,siginfo_t*infop,intopti...
代码星球 ·2021-02-21

进程控制之wait和waitpid函数

当一个进程正常或异常终止时,内核就向其父进程发送SIGCHLD信号。因为子进程终止是个异步事件(这可以在父进程运行的任何时候发生),所以这种信号也是内核向父进程发的异步通知。父进程可以选择忽略该信号,或者提供一个该信号发生时即被调用执行的函数(信号处理程序)。对于这种信号的系统默认动作是忽略它)。调用wait或wait...

进程控制之exit函数

进程有下面5种正常终止方式:(1)在main函数内执行return语句。这等效于调用exit。(2)调用exit函数。此函数有ISOC定义,其操作包括调用各终止处理程序(终止处理程序在调用atexit函数时登记),然后关闭所有标准I/O流等。(3)调用_exit或_Exit函数。ISOC定义_Exit,其目的是为进程提...
代码星球 ·2021-02-21

进程控制之vfork函数

vfork函数的调用序列和返回值与fork相同,但两者的语义不同。vfork用于创建一个新进程,而新进程的目的是exec一个新程序。vfork和fork一样都创建一个子进程,但是它并不将父进程的地址空间完全复制到子进程中,因为子进程会立即调用exec(或exit),于是也就不会存访该地址空间。相反,在子进程调用exec...
代码星球 ·2021-02-21

进程控制之fork函数

一个现有进程可以调用fork函数创建一个新进程。#include<unistd.h>pid_tfork(void);返回值:子进程中返回0,父进程中返回子进程ID,出错返回-1由fork创建的新进程被称为子进程(childprocess)。fork函数被调用一次,但返回两次。两次返回的唯一区别是子进程的返回...
代码星球 ·2021-02-21

进程控制之进程标识符

每个进程都有一个非负整型表示的唯一进程ID。因为进程ID标识符总是唯一的,常将其用作其他标识符的一部分以保证其唯一性。例如,应用程序有时就把进程ID作为名字的一部分来创建一个唯一的文件名。虽然是唯一的,但是进程ID可以重用。当一个进程终止后,其进程ID就可以再次使用了。大多数UNIX系统实现延迟重用算法,使得赋予新建进...
代码星球 ·2021-02-21
首页上一页...89101112...下一页尾页