1.
<?php
echo "调用正在进行……<br>";
$result = system('/usr/local/apache2/htdocs/asterisk/ast_start');
?>
//
2.在/usr/local/apache2/htdocs/asterisk/目录下建立文件ast_start.c
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
int main()
{
uid_t uid ,euid;
int id;
uid = getuid() ;
euid = geteuid();
//printf("my uid :%u/n",getuid()); //这里显示的是当前的uid 可以注释掉.
//printf("my euid :%u/n",geteuid()); //这里显示的是当前的euid
if(setreuid(euid, uid)) //交换这两个id
{
perror("setreuid");
}
//printf("/n/nafter setreuid uid :%u/n",getuid());
//printf("afer sertreuid euid :%u/n",geteuid());
id = system( "asterisk" );
//printf( "/nid=%d/n",id );
//id=-1:出现错误
//id=0:调用成功但是没有出现子进程
//id>0:成功退出的子进程的id
return 0;
}
///
3. 保存并编译ast_start.c
#gcc -o ast_start -Wall ast_start.c
//
4. 赋权限
#chmod u+s ./ast_start
//
5. 在浏览器中预览结果
附:关掉一个进程ast_stop.c
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
int main()
{
uid_t uid ,euid;
int id;
uid = getuid() ;
euid = geteuid();
if(setreuid(euid, uid)) //交换这两个id
{
perror("setreuid");
}
id = system( "kill -9 $(pidof asterisk)" );
//pidof获得进程asterisk的ID号
return 0;
}