new matlab functions: background processes via queue_*.m
This commit is contained in:
parent
3bdc4650ab
commit
e756433aa6
22
matlab/queue_addProcess.m
Normal file
22
matlab/queue_addProcess.m
Normal file
@ -0,0 +1,22 @@
|
||||
function [pid,filenames] = queue_addProcess( command )
|
||||
% [pid,filenames] = queue_addProcess( command )
|
||||
%
|
||||
% Sebastian Held <sebastian.held@uni-due.de>
|
||||
% 12.5.2010
|
||||
|
||||
if ~isunix
|
||||
error 'your OS is not supported (Unix only)'
|
||||
end
|
||||
|
||||
if nargout > 1
|
||||
filenames.stdout = tempname;
|
||||
filenames.stderr = tempname;
|
||||
else
|
||||
filenames.stdout = '/dev/null';
|
||||
filenames.stderr = '/dev/null';
|
||||
end
|
||||
|
||||
cmd = ['(' command ') >' filenames.stdout ' 2>' filenames.stderr ' & echo $!' ];
|
||||
[~,result] = unix( cmd );
|
||||
|
||||
pid = str2double(result);
|
25
matlab/queue_checkProcess.m
Normal file
25
matlab/queue_checkProcess.m
Normal file
@ -0,0 +1,25 @@
|
||||
function [alive,stdout,stderr] = queue_checkProcess( pid, filenames )
|
||||
% [alive,stdout,stderr] = queue_checkProcess( pid )
|
||||
%
|
||||
% Sebastian Held <sebastian.held@uni-due.de>
|
||||
% 12.5.2010
|
||||
|
||||
if ~isunix
|
||||
error 'your OS is not supported (Unix only)'
|
||||
end
|
||||
|
||||
if nargout > 1
|
||||
fid = fopen( filenames.stdout );
|
||||
stdout = fread(fid);
|
||||
fclose(fid);
|
||||
end
|
||||
if nargout > 2
|
||||
fid = fopen( filenames.stderr );
|
||||
stderr = fread(fid);
|
||||
fclose(fid);
|
||||
end
|
||||
|
||||
cmd = ['ps --no-headers -p' num2str(pid) ];
|
||||
[status,~] = unix( cmd );
|
||||
|
||||
alive = (status == 0);
|
40
matlab/queue_delProcess.m
Normal file
40
matlab/queue_delProcess.m
Normal file
@ -0,0 +1,40 @@
|
||||
function [stdout,stderr] = queue_delProcess( pid, filenames )
|
||||
% [stdout,stderr] = queue_delProcess( pid, filenames )
|
||||
%
|
||||
% if pid == 0, do not kill a process, but clean up files
|
||||
%
|
||||
% Sebastian Held <sebastian.held@uni-due.de>
|
||||
% 12.5.2010
|
||||
|
||||
if ~isunix
|
||||
error 'your OS is not supported (Unix only)'
|
||||
end
|
||||
|
||||
if pid ~= 0
|
||||
alive = queue_checkProcess( pid );
|
||||
|
||||
if alive
|
||||
unix( ['kill ' num2str(pid)] );
|
||||
alive = queue_checkProcess( pid );
|
||||
end
|
||||
if alive
|
||||
pause(1)
|
||||
unix( ['kill ' num2str(pid)] );
|
||||
alive = queue_checkProcess( pid );
|
||||
end
|
||||
if alive
|
||||
unix( ['kill -KILL ' num2str(pid)] );
|
||||
end
|
||||
end
|
||||
|
||||
if nargin > 1
|
||||
if nargout == 1
|
||||
[~,stdout] = queue_checkProcess( pid, filenames );
|
||||
end
|
||||
if nargout == 2
|
||||
[~,stdout,stderr] = queue_checkProcess( pid, filenames );
|
||||
end
|
||||
|
||||
delete( filenames.stdout );
|
||||
delete( filenames.stderr );
|
||||
end
|
Loading…
Reference in New Issue
Block a user