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

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>
            亚洲国产精选| 国产精品二区三区四区| 国产一区二区三区在线观看免费视频 | 久久精品欧美日韩精品| 国产亚洲观看| 欧美黄色成人网| 欧美美女喷水视频| 欧美伊人久久久久久午夜久久久久 | 欧美影视一区| 亚洲国产精品久久久久秋霞影院| 欧美国产日韩a欧美在线观看| 欧美成人小视频| 亚洲免费在线视频| 久久久久中文| 亚洲一区二区三区高清 | 亚洲一区亚洲二区| 影音先锋中文字幕一区| 亚洲美女视频网| 国语自产精品视频在线看| 亚洲韩国一区二区三区| 国产精品成人播放| 欧美国产成人精品| 国产精品日韩在线播放| 欧美激情导航| 国产亚洲精品aa| 亚洲美女尤物影院| 在线欧美亚洲| 亚洲综合首页| 亚洲视频一二区| 久久婷婷av| 欧美一区在线视频| 欧美三级电影一区| 欧美第十八页| 国产综合欧美| 亚洲午夜久久久久久尤物| 亚洲国内精品| 久久精品午夜| 亚洲一区二区三区在线观看视频| 老司机免费视频久久| 欧美中文在线免费| 国产精品99免费看| 亚洲三级色网| 最新中文字幕一区二区三区| 欧美亚洲一区| 久久成人资源| 国产精品sss| 日韩午夜免费视频| 亚洲欧洲日产国产综合网| 久久国产福利| 久久久久网址| 国产有码在线一区二区视频| 亚洲欧美电影在线观看| 亚洲午夜精品| 欧美视频在线观看视频极品| 日韩视频免费观看| 一区二区三区**美女毛片| 欧美国产日本在线| 亚洲激情在线播放| 亚洲精选中文字幕| 欧美精品在线观看播放| 亚洲韩国青草视频| 妖精成人www高清在线观看| 毛片一区二区三区| 亚洲高清视频的网址| 亚洲老司机av| 欧美乱妇高清无乱码| 亚洲毛片在线看| 亚洲欧美视频一区二区三区| 欧美午夜宅男影院| 亚洲欧美日韩区| 久久免费高清| 亚洲人成欧美中文字幕| 欧美成人资源网| 中国成人黄色视屏| 久久岛国电影| 亚洲国产高清高潮精品美女| 蜜臀久久久99精品久久久久久| 欧美承认网站| 亚洲一区二区免费| 国内视频一区| 欧美夫妇交换俱乐部在线观看| 99精品欧美一区二区三区| 亚洲欧美一级二级三级| 国产主播在线一区| 欧美成人中文| 亚洲男人的天堂在线| 久久影院午夜片一区| 亚洲精品乱码久久久久久久久| 欧美日韩一区二区三区四区五区| 亚洲欧美国产高清| 欧美激情一区二区久久久| 一区二区三区免费观看| 国产日本欧美一区二区三区在线| 久久米奇亚洲| 亚洲伊人观看| 亚洲高清一区二| 性欧美大战久久久久久久免费观看| 激情视频亚洲| 欧美性猛交xxxx免费看久久久| 久久精品成人一区二区三区| 亚洲精品视频在线观看免费| 久久精品在线| 亚洲婷婷综合久久一本伊一区| 精品动漫3d一区二区三区免费| 欧美日韩成人在线播放| 久久久久国产一区二区三区| 一区二区三区日韩欧美| 欧美福利视频一区| 蜜臀av性久久久久蜜臀aⅴ| 欧美亚洲一区在线| 亚洲成人资源| 国产精品综合网站| 欧美多人爱爱视频网站| 午夜国产精品视频| 日韩网站在线看片你懂的| 久久三级视频| 午夜在线成人av| 日韩视频精品在线| 在线不卡中文字幕播放| 国产精品亚洲人在线观看| 欧美日韩成人综合在线一区二区| 久久久国产成人精品| 亚洲专区国产精品| 一本到12不卡视频在线dvd| 亚洲国产日韩欧美综合久久| 久久亚洲高清| 久久久久久久久综合| 性欧美暴力猛交69hd| 女人天堂亚洲aⅴ在线观看| 亚洲少妇自拍| 99精品福利视频| 亚洲黄一区二区三区| 在线观看中文字幕不卡| 国产一区视频网站| 国产日韩一区在线| 国产日韩精品一区二区浪潮av| 国产精品久久久久久久久免费| 欧美日韩中文字幕在线视频| 欧美极品在线视频| 欧美日韩午夜激情| 欧美日韩精品在线| 欧美三级乱人伦电影| 国产精品福利网| 国产精品久久久久久av福利软件 | 亚洲高清在线精品| 亚洲国产乱码最新视频| 亚洲激情女人| 在线综合亚洲| 午夜精品福利视频| 久久久99免费视频| 麻豆精品视频在线观看| 欧美国产激情| 亚洲精品影院在线观看| 亚洲视频免费| 欧美影院久久久| 久久一区二区三区四区五区| 美日韩丰满少妇在线观看| 欧美xx视频| 欧美午夜不卡视频| 国产视频久久| 最近中文字幕日韩精品| 99re热这里只有精品视频| 亚洲无限av看| 玖玖在线精品| 亚洲精品一区二| 亚洲欧美日本日韩| 开心色5月久久精品| 欧美日韩一区成人| 国产亚洲一二三区| 亚洲精品黄网在线观看| 亚洲一区二区免费视频| 久久香蕉国产线看观看av| 亚洲国产综合在线看不卡| 国产精品99久久久久久久久| 久久久久久综合| 欧美午夜精品| 亚洲国产精品成人va在线观看| 亚洲视频免费在线| 久久久久久综合| 亚洲久久在线| 久久人人97超碰精品888| 欧美色大人视频| 亚洲国产视频a| 久久成人这里只有精品| 亚洲区国产区| 久久精品中文字幕一区| 国产精品成人播放| 亚洲精品免费在线| 久久久成人精品| 亚洲午夜视频在线观看| 免费成人av| 永久免费精品影视网站| 午夜精品久久久久| 亚洲精品美女91| 美国三级日本三级久久99| 国产免费一区二区三区香蕉精| 国产精品99久久不卡二区 | 一二三区精品| 欧美高清视频在线观看| 欧美中文日韩|