Linux系統下 execl 函數特點

Linux系統下execl函數特點:


        當進程調用一種exec函數時,該進程完全由新程序代換,而新程序則從其main函數開始執行。因爲調用exec並不創建新進程,所以前後的進程ID並未改變。exec只是用另一個新程序替換了當前進程的正文、數據、堆和棧段。
         特點1.前後進程ID未改變,所以我們可以向該ID發送消息,控制一個不相關的可執行文件。

pid_t child_id;
{
       pid_t pid;
       pid = fork();
      if(pid > 0)
   {
       child_id = pid;
   }
   else if(pid == 0)
  {
        execl("./printhello","printhello", (char*)0);
  }
}

別的函數中,可以發送:
{
     kill(child_id, SIGKILL);
}

這樣,就可以退出printhello的執行了。
如果用system,system調用的進程與fork的子進程不再是同一進程,就不能通過這種簡便的方式控制到位。

二、用另一個新程序替換了當前進程的正文、數據、堆和棧段。

 當前進程的正文都被替換了,那麼execl後的語句,即便execl退出了,都不會被執行。

比如:
int main()
{
   execl("/bin/ls","ls", (char*)0);
   printf("ls files end\n");
}
 printf就不會再被調用。




本文來自CSDN博客,轉載請標明出處:http://blog.chinaunix.net/space.php?uid=20583479&do=blog&id=1919897
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章