clone()
でシステムコールを使用する方法を知ることに多くの時間を費やしてきましたlinux
。以下のプログラムを書いたのですが、うまく動きませんでした....
#define _GNU_SOURCE
#include<stdio.h>
#include<stdlib.h>
#include<signal.h>
#include<sched.h>
#include<sys/types.h>
int sched2()
{
printf("it is working\n");
}
int main(int argc, char *argv[])
{
printf("in the main\n");
void *stack=malloc(65536);
int Pid=clone(sched2, stack, 0, NULL);
printf("%d\n",Pid );
if(Pid==-1)
{
printf("clone error\n");
exit(1);
}
sleep(100);
printf("yea2");
exit(0);
}
予想通り、文字列it is working
が出力されるはずです...
in the main
2534
文字列を印刷していませんでしたit is working
。さらに、新しく作成したカーネル スレッドのプロセス ID を取得して発行すると、
kill -9 2534
そして、psコマンドを使用して端末上のプロセスを確認したところ、次のようになるはずです...
PID TTY TIME CMD
2209 pts/2 00:00:00 bash
2533 pts/2 00:00:00 a.out
2534 pts/2 00:00:00 a.out <defunct>
2535 pts/2 00:00:00 ps
プロセスは実際には強制終了されません!! まだ実行中です...ライトを投げてください...ありがとう...