在WIN32里,"进程"是指一个程序,而"线程"是一个"进程"里的一个执行"线索"。从核心上讲, WIN32的多进程与Linux并无多大的区别,在WIN32里的线程才相当于Linux的进程,是一个实际正在执行的代码。但是,WIN32里同一个进程里各个线程之间是共享数据段的。这才是与Linux的进程最大的不同。
我是一个win的apt盲,找了一个简单的例子
引用:int g;
DWORD WINAPI ChildProcess(LPVOID lpParameter)
{
int i;
for (i = 1; i < 1000; i++) {
g++;
printf("This is Child Thread: %d\n", g);
}
ExitThread(0);
};
void main()
{
int threadID;
int i;
g = 0;
CreateThread(NULL, 0, ChildProcess, NULL, 0, &threadID);
for (i = 1; i < 1000; i++) {
g++;
printf("This is Parent Thread: %d\n", g);
}
}
也不知道对不对!
在linux下讲程序是一个包含可以执行代码的文件,是一个静态的文件.而进程就是可执行文件的具体实现.
当程序被系统调用到内存以后,系统会给程序分配一定的资源(内存,设备等等)然后进行一系列过程,使程序变成进程以供系统调用.在系统里面只有进程没有程序,为了区分各个不同的进程,系统给每一个进程分配了一个ID以便识别.
通过对
可以是用getpid和getppid分别得到本进程和其父进程的ID
使用fork可以创建一个进程。当一个进程调用了fork 以后,系统会创建一个子进程.这个子进程和父进程不同的地方只有他的进程ID 和父进程ID,其他的都是一样。
为何要创建子进程呢?多任务系统在同一时间会有许多的进程在争夺系统的资源.有时进程为了早一点完成任务就创建子进程来争夺资源. 一旦子进程被创建,父子进程一起从fork 处继续执行,相互竞争系统的资源。
为说明进程和线程的区别(在我看来win里的进程和线程是父子关系,而linux里的进程是兄弟关系)写了如下程序
这个程序是在linux下创建一个后台运行的程序。
首先,了解一下创建后台程序的基本思想:首先父进程创建一个子进程.然后子进程杀死父进程,父进程所有的工作就是创建子进程然后被kill。
引用:#include
#include
#include
#include
#include
#include
#include
#define MAIL "/home/andone/project"
#define SLEEP_TIME 10
int main(void)
{
pid_t child;
if ((child = fork()) == -1) {
printf("Fork Error: %s\n", strerror(errno));
exit(1);
} else if (child > 0)
while (1);
if (kill(getppid(), SIGTERM) == -1) {
printf("Kill Error: %s\n", strerror(errno));
exit(1);
}
{
int mailfd;
while (1) {
if ((mailfd = open(MAIL, O_RDONLY)) != -1) {
fprintf(stderr, "%s", "\007");
close(mailfd);
}
sleep(SLEEP_TIME);
}
}
}
这个程序是检查/home/andone/project这个路径,如果有文件在里面,每10秒鸣笛一次(准确的说是每10描检查一次),当然我的这个程会使我的电脑响个不停,因为里面总有文件,起码他本身的执行文件就在里面。
差不多说完了,很罗唆。