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

posts - 297,  comments - 15,  trackbacks - 0
process進程 and thread
獲取當前進程getpid(),父進程getppid(),當前用戶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;
}

獲取登錄用戶的個人信息,如用戶名,當前目錄,用戶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()
如果沒有找到/bin/sh則返回127,成功返回0,出錯返回-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調用創建一個新進程
#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.執行成功,就向父進程返回子進程的PID,并向子進程返回0,只調用一次fork,它會返回兩次

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()函數族
exec用被執行的程序完全替換了調用進程的映像。exec啟動一個新程序,替換原有的進程
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[]);
以上的函數都必須以NULL結束

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調用可以收集子進程的退出狀態
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);
}
~
信 號:
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) 評論(0)  編輯 收藏 引用 所屬分類: Linux_Coding
<2025年9月>
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011

常用鏈接

留言簿(10)

隨筆分類(307)

隨筆檔案(297)

algorithm

Books_Free_Online

C++

database

Linux

Linux shell

linux socket

misce

  • cloudward
  • 感覺這個博客還是不錯,雖然做的東西和我不大相關,覺得看看還是有好處的

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

搜索

  •  

最新評論

閱讀排行榜

評論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            亚洲欧美不卡| 欧美精品在线免费观看| 久久综合久久久久88| 午夜精品999| 新片速递亚洲合集欧美合集| 亚洲综合视频1区| 欧美夜福利tv在线| 久久在精品线影院精品国产| 久久亚洲春色中文字幕| 久久国产精品久久久| 午夜国产精品视频| 亚洲一区二区三区在线视频| 亚洲欧美日韩国产精品| 欧美一区二区三区四区在线| 久久网站免费| 欧美日本三区| 国模精品一区二区三区色天香| 在线观看日韩国产| 99视频有精品| 国产精品wwwwww| 亚洲国产精品一区二区尤物区 | 亚洲一级黄色片| 亚洲欧美日韩另类| 久久综合久久综合久久综合| 欧美精品偷拍| 国产综合欧美在线看| 99国产精品自拍| 久久免费国产精品| 99精品视频免费全部在线| 欧美在线电影| 国产精品久久久久婷婷| 亚洲国产人成综合网站| 亚洲欧美日韩网| 亚洲黄色成人| 久久深夜福利| 国产欧美日韩精品专区| 欧美在线一二三区| 欧美精品国产精品| 狠狠入ady亚洲精品| 国产日韩欧美二区| 亚洲级视频在线观看免费1级| 亚洲永久视频| 亚洲国产天堂久久国产91| 欧美一级视频精品观看| 欧美激情免费在线| 亚洲大胆人体视频| 久久九九热re6这里有精品| 欧美亚洲午夜视频在线观看| 欧美成人精品激情在线观看| 亚洲一二三区在线| 欧美日本不卡| 亚洲伦理久久| 91久久在线视频| 欧美ed2k| 亚洲精品乱码久久久久久按摩观| 久久中文字幕一区二区三区| 亚洲一区二区免费视频| 欧美日韩国产综合视频在线| 亚洲欧洲日本一区二区三区| 久久综合婷婷| 欧美激情自拍| 久久综合伊人77777尤物| 国产欧美一级| 久久精品国产久精国产爱| 亚洲影视综合| 国产一区二区日韩| 久久综合狠狠综合久久综合88| 欧美在线二区| 亚洲高清av在线| 亚洲国产精选| 欧美午夜精品久久久久久孕妇| 一区二区欧美精品| 中文亚洲欧美| 国产日韩精品一区观看| 久久偷看各类wc女厕嘘嘘偷窃| 国产婷婷色综合av蜜臀av| 欧美视频一区二| 亚洲一区二区精品在线观看| 亚洲免费大片| 性娇小13――14欧美| 国产精品少妇自拍| 欧美在线精品免播放器视频| 欧美一级大片在线免费观看| 国产日韩精品视频一区二区三区| 欧美在线一区二区| 久久免费黄色| 中文欧美日韩| 欧美一二三视频| 亚洲日本成人在线观看| 99精品热视频只有精品10| 国产精品入口夜色视频大尺度 | 一区二区日韩精品| 亚洲视频精选| 在线成人av.com| 日韩网站在线| 狠狠色丁香婷婷综合久久片| 亚洲电影免费| 国产欧美欧美| 亚洲三级国产| 国产综合色一区二区三区| 亚洲黄色免费| 国产一区二区三区网站 | 亚洲精品国产无天堂网2021| 国产精品久久久久7777婷婷| 老司机精品导航| 欧美色图天堂网| 另类成人小视频在线| 欧美日韩亚洲在线| 欧美成人精品一区| 国产欧美日韩中文字幕在线| 欧美黄在线观看| 国产一级一区二区| 一本大道av伊人久久综合| 在线日韩精品视频| 午夜精品久久久久影视| 在线一区二区日韩| 女人香蕉久久**毛片精品| 欧美亚洲综合另类| 国产精品v欧美精品v日本精品动漫| 免费日韩成人| 国产日本精品| 亚洲一卡久久| 亚洲一区二区三区欧美| 欧美成熟视频| 亚洲乱码国产乱码精品精可以看 | 久久一区二区三区国产精品 | 亚洲国产福利在线| 午夜精品区一区二区三| 亚洲深夜福利网站| 欧美日本高清视频| 最新国产の精品合集bt伙计| 亚洲视频在线播放| 免费试看一区| 欧美成在线视频| 在线欧美福利| 欧美成人激情视频免费观看| 美女久久一区| 精品成人久久| 久久久久青草大香线综合精品| 久久激情中文| 国模一区二区三区| 久久久99免费视频| 免费在线日韩av| 亚洲激情另类| 欧美精品日韩一本| 一本久道综合久久精品| 亚洲精选视频在线| 亚洲国产91| 久久夜色精品国产亚洲aⅴ| 久久一综合视频| 欧美性猛交xxxx乱大交退制版| 激情欧美一区| 久久综合五月天婷婷伊人| 欧美亚洲三级| 国产亚洲一二三区| 亚洲小少妇裸体bbw| 99精品国产在热久久| 欧美日韩国产精品一区| 亚洲免费观看| 亚洲精品在线视频| 欧美区一区二区三区| 亚洲视频在线播放| 国产精品免费看片| 久久久久久一区二区三区| 美国十次成人| 国产精品天天看| 亚洲日本成人网| 国产乱码精品1区2区3区| 亚洲激情亚洲| 欧美另类videos死尸| 一区二区不卡在线视频 午夜欧美不卡在 | 一本一道久久综合狠狠老精东影业 | 久久成人精品| 在线成人免费观看| 欧美片网站免费| 亚洲欧美日韩一区二区三区在线| 久久午夜羞羞影院免费观看| 亚洲久久一区二区| 国产日韩欧美在线看| 欧美激情视频在线免费观看 欧美视频免费一 | 亚洲婷婷综合色高清在线| 国产日韩精品一区二区浪潮av| 久久综合给合久久狠狠狠97色69| 亚洲精选大片| 欧美成人免费在线观看| 午夜精品久久久久久久蜜桃app | 欧美一区二区精品| 亚洲精品免费看| 好吊色欧美一区二区三区视频| 欧美日韩精品伦理作品在线免费观看| 性亚洲最疯狂xxxx高清| 亚洲精品黄色| 欧美aⅴ99久久黑人专区| 亚洲综合精品自拍| 一本久久综合| 亚洲精品亚洲人成人网| 国产一区二区三区黄| 国产精品免费小视频| 欧美日韩国产bt| 欧美激情视频在线免费观看 欧美视频免费一|