RSS

C: fork, execl の使用例

30 8月

fork と execl 関数を使ってプロセスを起動する例

/******************************************************

     execl 関数のテスト

 ******************************************************/
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/wait.h>

int main(int argc, char* argv[])
{
  /* プロセス ID */
  pid_t pid;

  if (argc < 2) {
    puts("Usage: execlpTest dir");
    return 9;
  }

  /* 新しいプロセスを作成する。*/
  if ((pid = fork()) == 0) {
    /* 子プロセス */
    if (argc > 1)
    {
      /* 子プロセスで "ls -l argv[1]" を実行する。*/
      execl("/bin/ls", "ls", "-l", argv[1], NULL);
    }
  }
  else if (pid > 0) {
    /* 親プロセス */
    if (argc > 1) {
      /* 子プロセスを起動したことを表示する。*/
      puts("New process started\n");
    }
    wait(0);
  }

  return 0;
}

実行例

$ ./execTest
Usage: execlpTest dir
$ ./execTest ~
New process started

total 20
drwxrwxr-x  2 user user 4096 Aug 27 18:02 bin
lrwxrwxrwx  1 user user   16 Aug 10 10:49 cgi-bin -> /usr/lib/cgi-bin
drwxrwxr-x  2 user user 4096 Aug 10 10:48 data
lrwxrwxrwx  1 user user   13 Aug 10 10:49 html -> /var/www/html
drwxrwxr-x  3 user user 4096 Aug 11 20:08 lib
drwxrwxr-x  2 user user 4096 Aug 26 15:36 temp
drwxrwxr-x 22 user user 4096 Aug 17 11:18 workspace
user@ubuntu16:~/workspace/C/exec$
 
コメントする

投稿者: : 2016/08/30 投稿先 C, gcc

 

タグ:

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

 
%d人のブロガーが「いいね」をつけました。