这是一个关于父亲与儿子的故事:
父亲的一生:①生一个儿子。如果儿子被杀了,再生一个!
②工作。
儿子的一生:等着父亲被杀,取而代之(成为父亲)。
这则故事已经完整地表达了我想要表达的全部思想,我们可以通过假设“父亲被杀了”或“儿子被杀了”来领会它。
废话少说,看源码:
program Oliver;
uses
Windows;
procedure WaitForAncestor;
var
MutexName: String;
MutexHandle: THandle;
begin
MutexName := '110';
MutexHandle := OpenMutex(SYNCHRONIZE, True, PChar(MutexName));
if (MutexHandle <> 0) then
begin
WaitForSingleObject(MutexHandle, INFINITE);
CloseHandle(MutexHandle);
end;
CreateMutex(nil, True, PChar(MutexName));
end;
procedure RunSuccessor;
var
StartupInfo: TStartupInfo;
ProcessInfo: TProcessInformation;
begin
while (True) do
begin
CreateProcess(PChar(ParamStr(0)), nil, nil, nil, True, NORMAL_PRIORITY_CLASS, nil, nil, StartupInfo, ProcessInfo);
WaitForSingleObject(ProcessInfo.hProcess, INFINITE);
end;
end;
begin
WaitForAncestor;
RunSuccessor;
end.
父亲的一生:①生一个儿子。如果儿子被杀了,再生一个!
②工作。
儿子的一生:等着父亲被杀,取而代之(成为父亲)。
这则故事已经完整地表达了我想要表达的全部思想,我们可以通过假设“父亲被杀了”或“儿子被杀了”来领会它。
废话少说,看源码:
program Oliver;
uses
Windows;
procedure WaitForAncestor;
var
MutexName: String;
MutexHandle: THandle;
begin
MutexName := '110';
MutexHandle := OpenMutex(SYNCHRONIZE, True, PChar(MutexName));
if (MutexHandle <> 0) then
begin
WaitForSingleObject(MutexHandle, INFINITE);
CloseHandle(MutexHandle);
end;
CreateMutex(nil, True, PChar(MutexName));
end;
procedure RunSuccessor;
var
StartupInfo: TStartupInfo;
ProcessInfo: TProcessInformation;
begin
while (True) do
begin
CreateProcess(PChar(ParamStr(0)), nil, nil, nil, True, NORMAL_PRIORITY_CLASS, nil, nil, StartupInfo, ProcessInfo);
WaitForSingleObject(ProcessInfo.hProcess, INFINITE);
end;
end;
begin
WaitForAncestor;
RunSuccessor;
end.
本文通过一个寓言式的父子故事,介绍了使用Pascal语言实现的一个简单程序,该程序展示了父进程与子进程间的循环替代过程。父进程在创建子进程后等待自身被“取代”,而子进程则无限循环尝试启动新的父进程。

808

被折叠的 条评论
为什么被折叠?



