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

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
<2009年11月>
25262728293031
1234567
891011121314
15161718192021
22232425262728
293012345

常用鏈接

留言簿(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>
            黑人巨大精品欧美一区二区| 久久视频一区| 国产精品国产三级国产普通话蜜臀 | 亚洲第一精品福利| 久久久久久久一区二区三区| 黑人巨大精品欧美一区二区| 久久在线播放| 欧美二区在线| 亚洲私人影院| 欧美一级理论片| 亚洲国产高清一区| 亚洲乱码国产乱码精品精| 欧美日韩ab| 欧美一区二区三区四区高清 | 亚洲自拍偷拍视频| 国产亚洲一区在线播放| 欧美福利精品| 国产精品嫩草久久久久| 久久久久久精| 欧美紧缚bdsm在线视频| 欧美在线观看视频一区二区| 久久久99免费视频| 99在线精品视频| 亚洲欧美在线另类| 亚洲精品中文字幕女同| 亚洲在线观看免费| 亚洲国产毛片完整版| 亚洲午夜免费视频| 亚洲国产女人aaa毛片在线| 一本色道久久加勒比精品| 在线观看欧美精品| 亚洲婷婷综合色高清在线 | 欧美精品一区二区在线观看| 午夜久久电影网| 欧美国产免费| 久久全球大尺度高清视频| 欧美天堂在线观看| 亚洲成色www久久网站| 国产日产欧产精品推荐色 | 国产精品99久久久久久人| 在线看国产日韩| 亚洲欧美日韩国产一区二区三区 | 亚洲神马久久| 久久综合一区| 欧美日韩精品一本二本三本| 欧美一区二视频在线免费观看| 久久久久免费观看| 欧美一区二区三区在线视频| 欧美日韩精品免费观看视频完整| 久久婷婷影院| 国产欧美激情| 亚洲天堂av在线免费| 亚洲精品一级| 另类专区欧美制服同性| 久久久噜噜噜久久中文字免| 国产精品成人在线观看| 亚洲精品老司机| 在线观看视频一区| 久久免费偷拍视频| 久久久xxx| 欧美三级网址| 亚洲久久视频| 亚洲天堂成人在线观看| 欧美日韩亚洲国产精品| 欧美在线精品一区| 亚洲欧美制服另类日韩| 亚洲日韩中文字幕在线播放| 欧美影片第一页| 久久九九全国免费精品观看| 国产伦精品一区二区三区免费迷| 亚洲视频在线观看视频| 亚洲欧美制服另类日韩| 国产精品免费一区豆花| 香蕉成人久久| 久久久综合视频| 在线日本成人| 欧美韩国在线| 一本久久综合| 久久精精品视频| 一区免费观看| 欧美精品v日韩精品v韩国精品v| 亚洲国产欧美国产综合一区| 亚洲精品午夜| 国产精品久久久久久久久久三级 | 噜噜爱69成人精品| 亚洲激情啪啪| 欧美日韩精品一区二区天天拍小说| 亚洲精品乱码久久久久久按摩观| 91久久精品美女| 一本色道久久88综合日韩精品| 欧美日韩专区在线| 欧美一区二区三区婷婷月色| 蜜臀av一级做a爰片久久| 亚洲精品孕妇| 国产精品一二一区| 久久久午夜电影| 亚洲另类一区二区| 欧美一级久久| 亚洲精选一区二区| 国产精品综合网站| 欧美成人免费va影院高清| 一本久久a久久精品亚洲| 久久先锋资源| 在线亚洲一区二区| 精品999在线观看| 欧美日韩精品免费观看| 久久久久一本一区二区青青蜜月| 亚洲精品国精品久久99热| 久久精品欧洲| 一本色道久久加勒比88综合| 国产精品私房写真福利视频| 猛男gaygay欧美视频| 亚洲欧美成人网| 最新国产精品拍自在线播放| 欧美自拍偷拍| 在线亚洲自拍| 亚洲片在线观看| 国内精品美女在线观看| 国产精品理论片| 欧美激情第10页| 久久免费精品日本久久中文字幕| 亚洲视频在线二区| 亚洲精品视频一区| 欧美高清视频在线 | 亚洲欧洲日产国产综合网| 国产农村妇女精品一区二区| 欧美另类综合| 欧美a级一区| 久久久国产一区二区三区| 午夜久久久久久| 一区二区三区四区五区视频| 亚洲国产精品va在线看黑人动漫| 久久人91精品久久久久久不卡| 亚洲欧美日韩视频二区| 亚洲午夜激情网站| 日韩性生活视频| 日韩一级免费| 日韩视频在线你懂得| 亚洲精品欧美激情| 亚洲欧洲精品成人久久奇米网| 在线观看日韩国产| 亚洲大胆av| 91久久国产综合久久蜜月精品 | 欧美激情第五页| 欧美freesex交免费视频| 久久一区中文字幕| 狂野欧美一区| 欧美成人蜜桃| 91久久精品国产91久久性色| 欧美视频你懂的| 欧美日韩成人综合| 欧美午夜电影在线| 国产精品久久久久av| 国产精品嫩草久久久久| 国产精品日日摸夜夜添夜夜av| 国产欧美日韩高清| 国内成人在线| 亚洲欧洲视频| 亚洲无线观看| 久久福利电影| 久久成人精品| 亚洲日本va午夜在线电影| 亚洲性色视频| 亚洲欧美久久久久一区二区三区| 欧美一级理论片| 免费视频一区| 欧美视频成人| 国产在线视频不卡二| 亚洲欧洲一区二区三区久久| 中文一区字幕| 久久久夜夜夜| 亚洲美女av网站| 欧美一区1区三区3区公司| 久久久亚洲精品一区二区三区| 欧美国产大片| 国产老肥熟一区二区三区| 亚洲福利免费| 亚洲欧美国产日韩中文字幕| 久久婷婷丁香| 99视频一区| 久久久欧美精品| 欧美性色aⅴ视频一区日韩精品| 国产一区二区毛片| 亚洲免费高清视频| 久久久精品动漫| 亚洲美女视频网| 久久久久久午夜| 国产精品成人一区二区三区夜夜夜 | 免费成人高清在线视频| 一级成人国产| 欧美成人精品在线观看| 国产亚洲欧洲| 亚洲自拍啪啪| 亚洲日本理论电影| 久久久久久黄| 国产情侣久久| 亚洲欧美日韩一区二区三区在线观看 | 亚洲精品欧美激情| 久久精品欧洲| 国产精品一级二级三级|