红联Linux门户
Linux帮助

Windows与Linux:线程/进程

发布时间:2008-07-30 16:05:33来源:红联作者:Unique
在Linux里,只有进程的概念,但在WIN32里却还有一个"线程"的概念,那么Linux和WIN32在这里究竟有着什么区别呢?

在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以便识别.

通过对的include

可以是用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描检查一次),当然我的这个程会使我的电脑响个不停,因为里面总有文件,起码他本身的执行文件就在里面。

差不多说完了,很罗唆。
文章评论

共有 0 条评论