青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

posts - 297,  comments - 15,  trackbacks - 0
process進(jìn)程 and thread
獲取當(dāng)前進(jìn)程getpid(),父進(jìn)程getppid(),當(dāng)前用戶ID,getuid(), geteuid(),組ID,getgid(),getegid(), all need head file <unistd.h>
getlogin()返回登錄用戶名
example:
#include <iostream.h>
#include <unistd.h> //getpid() getppid()
int main()
{
cout<<getpid()<<endl; //current process ID
cout<<getppid()<<endl; //parent process ID
cout<<getgid()<<endl; //group process ID
cout<<getegid()<<endl; //effective group process ID
cout<<getuid()<<endl; //user process ID
cout<<geteuid()<<endl; //effective user process ID
cout<<getlogin()<<endl; //getlogin() return the login user name
                                                                            
return 0;
}

獲取登錄用戶的個(gè)人信息,如用戶名,當(dāng)前目錄,用戶ID,組ID等,need function struct passwd * getpwnam(const char *name)
如下面的例子:
/*
 * getname.c - Get login names
 */
#include <stdio.h>
#include <stdlib.h>//exit()
#include <unistd.h>//getlogin()
#include <pwd.h> //getpwnam()
                                                                                
int main(void)
{
        char *login;
        struct passwd *pentry;
                                                                                
        /* Get the login name */
        if((login = getlogin()) == NULL) { /* oops */
        perror("getlogin");
        exit(EXIT_FAILURE);
        }
                                                                                
        /* Get the password entry for login */
        if((pentry = getpwnam(login)) == NULL) {
        perror("getpwnam");
       exit(EXIT_FAILURE);
        }
                                                                                
        /* Display the password entry */
        printf("user name: %s\n", pentry->pw_name);
        printf("UID : %d\n", pentry->pw_uid);
        printf("GID : %d\n", pentry->pw_gid);
        printf("gecos : %s\n", pentry->pw_gecos);
        printf("home dir : %s\n", pentry->pw_dir);
        printf("shell : %s\n", pentry->pw_shell);
                                                                                
        exit(EXIT_SUCCESS);
}

system()
如果沒(méi)有找到/bin/sh則返回127,成功返回0,出錯(cuò)返回-1
example:
/*
 * system.c - Demonstrate the system() call
 */
#include <stdio.h>
#include <stdlib.h>
                                                                                
int main(void)
{
        int retval;
                                                                                
        retval = system("ls -l");
                                                                                
        if(retval == 127) {
                fprintf(stderr, "/bin/sh not available\n");
                exit(127);
        } else if(retval == -1) {
                perror("system");
                exit(EXIT_FAILURE);
        } else if(retval != 0) {
                fprintf(stderr, "command returned %d\n", retval);
                perror("ls");
        } else {
                puts("command successfully executed");
}
        exit(EXIT_SUCCESS);
}

fork調(diào)用創(chuàng)建一個(gè)新進(jìn)程
#include <unistd.h>

pid_t fork(void);

Description
fork() creates a child process that differs from the parent process only in its PID and PPID,
return value:
On success, the PID of the child process is returned in the parent's thread of execution, and a 0 is returned in the child's thread of execution. On failure, a -1 will be returned in the parent's context, no child process will be created, and errno will be set appropriately.執(zhí)行成功,就向父進(jìn)程返回子進(jìn)程的PID,并向子進(jìn)程返回0,只調(diào)用一次fork,它會(huì)返回兩次

example:
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
                                                                                
int main(void)
{
    pid_t child;
                                                                                
    if((child = fork()) == -1) {
        perror("fork");
        exit(EXIT_FAILURE);
    } else if(child == 0) {
        puts("in child");
        printf("\tchild pid = %d\n", getpid());
        printf("\tchild ppid = %d\n", getppid());
        exit(EXIT_SUCCESS);
    } else {
        puts("in parent");
        printf("\tparent pid = %d\n", getpid());
        printf("\tparent ppid = %d\n", getppid());
    }
    exit(EXIT_SUCCESS);
}

exec()函數(shù)族
exec用被執(zhí)行的程序完全替換了調(diào)用進(jìn)程的映像。exec啟動(dòng)一個(gè)新程序,替換原有的進(jìn)程
execl, execlp, execle, execv, execvp - execute a file
Synopsis
#include <unistd.h>

extern char **environ;

int execl(const char *path, const char *arg, ...);
int execlp(const char *file, const char *arg, ...);
int execle(const char *path, const char *arg,
..., char * const envp[]);
int execve    (const char *path, char *const argv[]);
int execvp(const char *file, char *const argv[]);
以上的函數(shù)都必須以NULL結(jié)束

example:
/*
 * execve.c - Illustrate execve
 */
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
                                                                                
int main(void)
{
    char *argv[] = {"/bin/ls", NULL};
                                                                                
    if(execve("/bin/ls", argv, NULL) == -1) {
        perror("execve");
        exit(EXIT_FAILURE);
    }
                                                                                
    puts("shouldn'
t get here");
                                                                                
    exit(EXIT_SUCCESS);
}
使用wait and waitpid調(diào)用可以收集子進(jìn)程的退出狀態(tài)
Name
wait, waitpid - wait for process to change state
Synopsis
#include <sys/types.h>
#include <sys/wait.h>

pid_t wait(int *status);
pid_t waitpid(pid_t pid, int *status, int options);
int waitid(idtype_t idtype, id_t id "
, siginfo_t *" infop ", int " options );
Description
All of these system calls are used to wait for state changes in a child of the calling process, and obtain information about the child whose state has changed. A state change is considered to be: the child terminated; the child was stopped by a signal; or the child was resumed by a signal. In the case of a terminated child, performing a wait allows the system to release the resources associated with the child; if a wait is not performed, then terminated the child remains in a "
zombie" state (see NOTES below).

If a child has already changed state, then these calls return immediately. Otherwise they block until either a child changes state or a signal handler interrupts the call (assuming that system calls are not automatically restarted using the SA_RESTART flag of sigaction(2)). In the remainder of this page, a child whose state has changed and which has not yet been waited upon by one of these system calls is termed waitable.
wait() and waitpid()
The wait() system call suspends execution of the current process until one of its children terminates. The call wait(&status) is equivalent to:

waitpid(-1, &status, 0);

The waitpid() system call suspends execution of the current process until a child specified by pid argument has changed state. By default, waitpid() waits only for terminated children, but this behaviour is modifiable via the options argument, as described below.

The value of pid can be:

< -1
    meaning wait for any child process whose process group ID is equal to the absolute value of pid.
-1
    meaning wait for any child process.
0
    meaning wait for any child process whose process group ID is equal to that of the calling process.
> 0
    meaning wait for the child whose process ID is equal to the value of pid.

The value of options is an OR of zero or more of the following constants:

WNOHANG
    return immediately if no child has exited.
WUNTRACED
    also return if a child has stopped (but not traced via ptrace(2)). Status for traced children which have stopped is provided even if this option is not specified.
WCONTINUED
    (Since Linux 2.6.10) also return if a stopped child has been resumed by delivery of SIGCONT.
if you want to more information aboat it, you can reference http://linux.die.net.

example:
/*
 * waiter.c - Simple wait usage
 */
#include <unistd.h>
//#include <sys/types.h>
#include <sys/wait.h>
#include <stdio.h>
#include <stdlib.h>
                                                                                
int main(void)
{
    pid_t child;
    int status;
                                                                                
    if((child = fork()) == -1) {
        perror("
fork");
        exit(EXIT_FAILURE);
    } else if(child == 0) {
        puts("
in child");
        printf("
\tchild pid = %d\n", getpid());
        printf("
\tchild ppid = %d\n", getppid());
        exit(EXIT_SUCCESS);
    } else {

        /* Wait for the child to exit */
        waitpid(child, &status, 0);
        printf("
in parent\n");
        printf("
\tparent pid = %d\n", getpid());
        printf("
\tparent ppid = %d\n", getppid());
        printf("
\tchild exited with %d\n", status);
    }
    exit(EXIT_SUCCESS);
}

abort()
#include <stdlib.h>
void abort(void)

kill()
#include <signal.h>
#include <sys/types.h>
int kill(pid_t pid, int sig)

example:
~/*
 * killer.c - Killing other processes
 */
#include <sys/types.h>
#include <sys/wait.h>//waitpid()
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <signal.h>//signal
                                                                                
int main(void)
{
    pid_t child;
    int status, retval;
                                                                                
    if((child = fork()) < 0) {
        perror("
fork");
        exit(EXIT_FAILURE);
    }
    if(child == 0) {
        /* Sleep long enough to be killed */
        
         sleep(1000);
        exit(EXIT_SUCCESS);
    } else {
        /* Use WNOHANG so wait will return */
        if((waitpid(child, &status, WNOHANG)) == 0) {
            retval = kill(child, SIGKILL);
            if(retval) {
                /* Kill failed, so wait on child to exit */
                puts("
kill failed");
                perror("
kill");
                waitpid(child, &status, 0);
            } else
                printf("
%d killed\n", child);
        }
    }
    exit(EXIT_SUCCESS);
}
~
信 號(hào):
alarm(), pause(),kill(), sigfillset(),sigaction(),sigpending(),all the functions can find from the site http://linux.die.net

線程
_clone(), pthread_creat(), pthread_exit(),pthread_join(),pthread_atfork(),pthread_cancel(), pthread cleanup宏,pthread_equal()
線程互斥,pthread_mutex_init, pthread_mutex_lock
pthead 中的p display posix

from:
http://blog.chinaunix.net/u1/45689/showart_689217.html
posted on 2010-03-14 15:09 chatler 閱讀(525) 評(píng)論(0)  編輯 收藏 引用 所屬分類: Linux_Coding
<2009年11月>
25262728293031
1234567
891011121314
15161718192021
22232425262728
293012345

常用鏈接

留言簿(10)

隨筆分類(307)

隨筆檔案(297)

algorithm

Books_Free_Online

C++

database

Linux

Linux shell

linux socket

misce

  • cloudward
  • 感覺(jué)這個(gè)博客還是不錯(cuò),雖然做的東西和我不大相關(guān),覺(jué)得看看還是有好處的

network

OSS

  • Google Android
  • Android is a software stack for mobile devices that includes an operating system, middleware and key applications. This early look at the Android SDK provides the tools and APIs necessary to begin developing applications on the Android platform using the Java programming language.
  • os161 file list

overall

搜索

  •  

最新評(píng)論

閱讀排行榜

評(píng)論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲国产精品视频一区| 99国产精品| 在线综合欧美| 亚洲肉体裸体xxxx137| 亚洲黄色免费电影| 日韩亚洲精品电影| 亚洲一区二区不卡免费| 亚洲女同性videos| 欧美在线亚洲综合一区| 美女啪啪无遮挡免费久久网站| 久久久久在线观看| 亚洲国产欧美日韩精品| 久久男人资源视频| 亚洲片国产一区一级在线观看| 一区二区激情小说| 久久精品一区二区三区不卡| 亚洲毛片一区二区| 欧美性猛交xxxx乱大交退制版| 久久精品国产综合| 免费试看一区| 国产精品v欧美精品v日本精品动漫| 国产精品视频1区| 黄色国产精品| 在线亚洲电影| 久久全球大尺度高清视频| 亚洲欧洲一二三| 久久免费黄色| 亚洲另类自拍| 久久成人资源| 欧美日韩国产片| 合欧美一区二区三区| 日韩一级大片在线| 久久国产日韩欧美| 亚洲乱码国产乱码精品精天堂| 校园春色综合网| 欧美激情片在线观看| 国产亚洲精品成人av久久ww| 日韩视频免费观看高清完整版| 久久成人综合网| 日韩视频中文字幕| 另类尿喷潮videofree| 国产精品视频专区| 一本色道久久88综合亚洲精品ⅰ| 久久中文字幕一区| 亚洲午夜av在线| 欧美日韩一二三区| 亚洲欧洲精品一区二区三区| 久久成人精品无人区| 99亚洲一区二区| 欧美成人免费va影院高清| 国内外成人免费视频| 欧美一区二区三区在线播放| 亚洲精品网站在线播放gif| 欧美专区亚洲专区| 国产精品午夜在线| 亚洲一区二区在线免费观看| 亚洲电影下载| 另类av一区二区| 亚洲国产色一区| 噜噜噜91成人网| 久久精品一区二区三区四区| 国产日韩精品视频一区二区三区 | 老司机凹凸av亚洲导航| 国产偷久久久精品专区| 先锋影院在线亚洲| 亚洲一区在线免费观看| 国产精品自在欧美一区| 午夜精品久久久久久久白皮肤 | 99爱精品视频| 久久精品国产精品亚洲综合| 久久久欧美一区二区| 国产精品一区一区| 免费在线成人av| 91久久在线| 亚洲无限av看| 久久久久久久网| 亚洲免费在线看| 欧美一区国产在线| 亚洲三级免费| 日韩一级大片| 欧美黄色片免费观看| 在线亚洲国产精品网站| 久久亚洲精品伦理| 久久这里只有| 亚洲啪啪91| 亚洲国产中文字幕在线观看| 91久久精品国产91久久| 亚洲视频在线免费观看| 欧美激情一级片一区二区| 一区二区三区精密机械公司 | 免播放器亚洲一区| 一色屋精品视频免费看| 久久国产毛片| 亚洲美女91| 亚洲免费在线| 久久久久九九九九| 亚洲人成网站999久久久综合 | 亚洲精品看片| 欧美 日韩 国产一区二区在线视频 | 亚洲视频一二| 午夜视频在线观看一区| 亚洲精品一区二区在线观看| 欧美亚洲在线视频| 久久久国产午夜精品| 国产在线拍揄自揄视频不卡99| 亚洲狼人综合| 欧美国产日韩免费| 一区二区三区精品在线| 欧美**人妖| 欧美亚州一区二区三区| 亚洲精品日韩激情在线电影| 99精品国产热久久91蜜凸| 久久久国产91| 午夜精品久久久久久| 亚洲国产精品一区| 老牛影视一区二区三区| 精久久久久久| 久久精品国产96久久久香蕉| 9国产精品视频| 欧美日韩精品欧美日韩精品 | 亚洲欧洲av一区二区三区久久| 欧美一区二区免费观在线| 欧美福利视频| 欧美一区二视频在线免费观看| 国产一区视频网站| 亚洲午夜久久久久久尤物| 欧美中文字幕在线| 欧美国产日韩一区二区| 欧美一区二区三区视频在线 | 国产麻豆精品视频| 久久久国产成人精品| 欧美精品在线极品| 蜜臀av性久久久久蜜臀aⅴ四虎| 国产精品乱子乱xxxx| 亚洲三级性片| 最近看过的日韩成人| 久久精品一二三区| 久久综合给合| 国产专区欧美精品| 欧美一区二区黄| 久久福利资源站| 国产九九精品| 午夜精品久久久久久久99热浪潮 | 欧美中文字幕在线播放| 国产精品久久久久久av下载红粉| 亚洲欧洲久久| 亚洲精品在线视频| 免费观看成人www动漫视频| 老司机免费视频一区二区| 合欧美一区二区三区| 久久经典综合| 久久综合网络一区二区| 狠狠色噜噜狠狠色综合久| 欧美在线高清视频| 毛片一区二区三区| 亚洲破处大片| 欧美日韩国产一级| 亚洲一区二区视频| 久久久久久久久久码影片| 一区国产精品| 欧美大胆人体视频| 99在线观看免费视频精品观看| 亚洲视频一二三| 国产精品网红福利| 久久精品夜色噜噜亚洲aⅴ | 99国内精品久久| 午夜精品久久久久久久久久久| 国产精品视频免费在线观看| 欧美中文字幕在线观看| 亚洲丰满少妇videoshd| 国产精品99久久久久久久久久久久 | 国产精品丝袜xxxxxxx| 欧美在线视屏| 亚洲国产另类久久久精品极度| 亚洲视频一区| 精久久久久久| 欧美chengren| 亚洲国产91精品在线观看| 91久久久在线| 欧美三级乱码| 久久不射中文字幕| 性做久久久久久免费观看欧美| 韩国成人精品a∨在线观看| 欧美精品久久一区| 久久9热精品视频| 亚洲精品一区二区三区av| 久久九九免费| 国内一区二区在线视频观看| 亚洲网站在线观看| 久热这里只精品99re8久| 一本色道久久综合精品竹菊| 国产欧美在线播放| 久久精品99国产精品| 久久综合狠狠综合久久综青草 | 国产亚洲欧美另类一区二区三区| 欧美黄色小视频| 久久久久久亚洲精品不卡4k岛国| 国产精品99久久久久久久女警| 欧美激情精品久久久久久蜜臀| 久久精品视频99|