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
當進程調用一種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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.