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

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>
            香蕉成人伊视频在线观看| 国产一区二区中文字幕免费看| 娇妻被交换粗又大又硬视频欧美| 久久久久.com| 老司机精品视频网站| 亚洲日本成人网| 亚洲精品日韩在线观看| 国产精品久久久久久户外露出 | 久久久精品国产99久久精品芒果| 国内精品嫩模av私拍在线观看 | 久久免费视频一区| 久久综合久久久| 一区二区三区久久久| 亚洲欧美国产精品va在线观看| 国产无遮挡一区二区三区毛片日本| 美女福利精品视频| 欧美日韩综合不卡| 久久全国免费视频| 欧美三级乱码| 久久久夜色精品亚洲| 欧美日本韩国| 久久久国产一区二区| 欧美日韩另类视频| 久久久久久网站| 欧美全黄视频| 米奇777在线欧美播放| 欧美天堂亚洲电影院在线播放| 久久久免费精品视频| 欧美三级电影大全| 免费看的黄色欧美网站| 国产精品进线69影院| 欧美国产三区| 国产午夜一区二区三区| 日韩天天综合| 91久久精品国产91久久性色tv| 亚洲欧美经典视频| 一本不卡影院| 毛片一区二区三区| 久久久综合激的五月天| 欧美午夜精品一区| 亚洲黄网站在线观看| 在线观看欧美日本| 欧美亚洲一区在线| 亚洲永久精品大片| 欧美精品免费在线观看| 欧美岛国在线观看| 在线观看国产日韩| 久久国产视频网| 久久精品免费电影| 国产欧美一区二区精品婷婷| 一区二区不卡在线视频 午夜欧美不卡在| 黄网动漫久久久| 久久精品国产亚洲一区二区| 久久精品主播| 国产日韩专区在线| 午夜精品福利视频| 欧美一级片一区| 国产精品欧美日韩一区| 亚洲一二三四久久| 亚洲欧美福利一区二区| 国产精品国产三级国产aⅴ入口 | 美日韩丰满少妇在线观看| 久久综合给合久久狠狠色| 国产真实久久| 久久婷婷麻豆| 欧美黄色一区| 亚洲美女在线观看| 欧美精品一区在线播放| 亚洲精品国产视频| 亚洲亚洲精品三区日韩精品在线视频 | 欧美日韩小视频| 91久久国产综合久久| 99国产精品久久久久久久| 欧美久久视频| 一区二区欧美视频| 亚洲欧美日韩精品一区二区| 国产精品一区久久久| 欧美一区综合| 欧美激情按摩| 在线视频日韩| 国产精品人人爽人人做我的可爱| 亚洲在线观看视频网站| 久久久久久久久久久一区| 亚洲国产精品一区二区第一页| 欧美激情第4页| 亚洲一卡二卡三卡四卡五卡| 久久久中精品2020中文| 亚洲精品美女久久久久| 欧美系列电影免费观看| 在线亚洲欧美视频| 久久九九国产精品| 亚洲高清一区二| 欧美日韩国产黄| 欧美一区二区三区四区在线观看| 免费日韩成人| 亚洲尤物在线| 亚洲第一主播视频| 欧美视频观看一区| 欧美一进一出视频| 欧美激情一区三区| 性久久久久久久久| 亚洲精品视频一区| 国产色综合网| 欧美日韩国产高清| 久久久久久**毛片大全| 一本一本久久a久久精品牛牛影视| 久久免费99精品久久久久久| 中国成人黄色视屏| 尤物99国产成人精品视频| 欧美婷婷久久| 欧美在线短视频| 亚洲精品乱码久久久久| 国产一区二区欧美日韩| 欧美大片在线观看| 久久精品视频在线播放| 在线视频精品| 亚洲电影免费在线观看| 久久精品理论片| 亚洲欧美激情诱惑| 一本色道久久综合亚洲91| 一区在线免费| 国产亚洲一本大道中文在线| 欧美视频在线观看一区二区| 美女尤物久久精品| 久久精品一区二区国产| 午夜精品电影| 亚洲综合日韩在线| 亚洲视屏一区| 一区二区三区日韩精品| 亚洲二区三区四区| 欧美成人亚洲成人| 麻豆精品视频| 老**午夜毛片一区二区三区| 久久精品日产第一区二区三区| 性欧美xxxx大乳国产app| 亚洲一区影音先锋| 亚洲视频在线二区| 亚洲视频www| 亚洲综合另类| 亚洲在线第一页| 亚洲一区二区精品| 国产精品99久久久久久白浆小说| 日韩视频免费在线| 99国产一区| 中文精品一区二区三区| 国产精品99久久久久久人| 一本色道88久久加勒比精品| 日韩小视频在线观看专区| 亚洲欧洲一区二区天堂久久| 亚洲欧洲日产国产综合网| 91久久综合亚洲鲁鲁五月天| 亚洲精品一区二区三区婷婷月| 亚洲另类黄色| 亚洲天堂男人| 欧美一区观看| 免费久久精品视频| 亚洲国内自拍| 在线亚洲观看| 欧美一级大片在线观看| 玖玖玖国产精品| 欧美日韩精品一区二区三区四区| 国产精品伦理| 激情久久久久久久久久久久久久久久| 激情五月***国产精品| 亚洲精品视频免费观看| 亚洲综合电影| 欧美.www| 一区二区三区免费网站| 欧美中文在线观看| 欧美成人亚洲| 国产精品麻豆欧美日韩ww| 韩日精品视频一区| 一个色综合导航| 久久久之久亚州精品露出| 亚洲人体大胆视频| 午夜精品久久久久久久99热浪潮| 蜜桃av综合| 国产精品尤物福利片在线观看| 亚洲国产老妈| 午夜久久tv| 亚洲第一福利在线观看| 亚洲欧美伊人| 欧美日本一道本| 狠狠入ady亚洲精品| 亚洲一区二区三区在线看| 免费在线观看一区二区| 亚洲一区三区视频在线观看| 欧美成人精品高清在线播放| 国产小视频国产精品| 中文久久乱码一区二区| 免费在线看一区| 午夜精品一区二区三区在线| 久久久久高清| 亚洲视频在线观看视频| 欧美阿v一级看视频| 黄色综合网站| 久久精品99国产精品酒店日本| 日韩亚洲欧美在线观看| 欧美www视频| 亚洲国产免费|