Уважаемые коллеги! Предлагаем вам разработку программного обеспечения под ключ.
Опытные программисты сделают для вас мобильное приложение, нейронную сеть, систему искусственного интеллекта, SaaS-сервис, производственную систему, внедрят или разработают ERP/CRM, запустят стартап.
Сферы - промышленность, ритейл, производственные компании, стартапы, финансы и другие направления.
Языки программирования: Java, PHP, Ruby, C++, .NET, Python, Go, Kotlin, Swift, React Native, Flutter и многие другие.
Всегда на связи. Соблюдаем сроки. Предложим адекватную конкурентную цену.
Заходите к нам на сайт и пишите, с удовольствием вам во всем поможем.
Текст программы:
1) Laba2.c
#include <stdio.h>
#include <string.h>
#include <sys/signal.h>
#include <sys/wait.h>
#include <time.h>
#include <sys/types.h>
#include <sys/errno.h>
void Event(int sig){
// printf("++++++++signal:%d+++++++++++",sig);
if( WIFEXITED(sig)){
printf( "Main Procces finished with message:%s\n",sys_errlist[WEXITSTATUS(sig)]);
}
if( WIFSIGNALED(sig)){
switch (WTERMSIG(sig)){
case SIGTSTP:{
signal(SIGTSTP,SIG_DFL);
signal(SIGCONT,*Event);
raise(SIGTSTP);
printf( "Main Procces stoped with signal:%d\n",WTERMSIG(sig));
break;
};
case SIGCONT:{
printf( "Main Procces continued with signal:%d\n",WTERMSIG(sig));
signal(SIGTSTP,*Event);
signal(SIGCONT,SIG_DFL);
raise(SIGCONT);
break;
}
default: {
signal(WTERMSIG(sig),SIG_DFL);
printf( "Main Procces killed with signal:%d\n",WTERMSIG(sig));
if(WCOREDUMP(sig)) printf( "Maked core\n" );
raise(WTERMSIG(sig));
};
};
};
if( WIFSTOPPED(sig)){
printf( "Main Procces stoped with sinal:%d\n",WSTOPSIG(sig));
}
}
int main(int argc, char* argv[],char* envp[]){
signal(SIGINT,*Event);
signal(SIGQUIT,*Event);
sigset(SIGTERM,*Event);
signal(SIGTSTP,*Event);
sigset(SIGABRT,*Event);
sigset(SIGILL,*Event);
sigset(SIGFPE,*Event);
int PN=0;
int i=0;
char *t[4];
int PID=getpid();
int status;
for(i=5;i<9;i++){
t[i-5]=argv[i];
}
if(t[0]==NULL) {
for(i=0;i<4;i++){
t[i]="2";
}
}
if (argc<4){
printf("No arguments\n");
return 1;
};
for (i=1;i<5;i++){
if (PID!=0){
PN=0;
if (atoi(argv[i])==1){
PN=1;
PID=fork();
};
if (atoi(argv[i])==2){
PN=2;
PID=fork();
};
if (atoi(argv[i])==3){
PN=3;
PID=fork();
};
if (atoi(argv[i])==4){
PN=4;
PID=fork();
};
};
};
if (PID==0){
time_t clock=time(NULL);
if (PN==1){
printf("PID:%i PPID:%i One Time:%s\n",getpid(),getppid(),ctime(&clock));
char *argvc[20];
argvc[0]="";
argvc[1]="1";
argvc[2]=t[0];
argvc[3]=NULL;
execv("laba2_1",argvc);
exit(errno);
};
if (PN==2){
printf("PID:%i PPID:%i Two Time:%s\n",getpid(),getppid(),ctime(&clock));
execl("laba2_1","","2",t[1],NULL);
exit(errno);
};
if (PN==3){
printf("PID:%i PPID:%i Three Time:%s\n",getpid(),getppid(),ctime(&clock));
char *argvc[20];
argvc[0]="";
argvc[1]="3";
argvc[2]=t[2];
argvc[3]=NULL;
execvp("/home/po21/Ghost/Laba2/Programm/laba2_1",argvc);
exit(errno);
};
if (PN==4){
printf("PID:%i PPID:%i Four Time:%s\n",getpid(),getppid(),ctime(&clock));
execlp("/home/po21/Ghost/Laba2/Programm/laba2_1","","4",t[3],NULL);
exit(errno);
};
}
else {
while((PID = wait(&status)) > 0){
if( WIFEXITED(status)){
printf( "Thread PID:%d finished with message:%s\n",PID,sys_errlist[WEXITSTATUS(status)]);
}
if( WIFSIGNALED(status)){
printf( "Thread PID:%d killed with signal:%d\n",PID,WTERMSIG(status));
if(WCOREDUMP(status)) printf( "Maked core\n" );
/* core - образ памяти для отлатчика adb */
};
if( WIFSTOPPED(status)){
printf( "Thread PID:%d stoped with sinal:%d\n",PID,WSTOPSIG(status));
}
if (errno>0 && errno<sys_nerr) printf("Error %s in thread %i\n",sys_errlist[errno],getpid());
}
};
return 0;
Результат работы программы:
PID:3191 PPID:3190 One Time:Thu Mar 24 20:42:37 2005
I am programm#1, I wait 1 sec
PID:3192 PPID:3190 Two Time:Thu Mar 24 20:42:37 2005
PID:3193 PPID:3190 Three Time:Thu Mar 24 20:42:37 2005
PID:3194 PPID:3190 Four Time:Thu Mar 24 20:42:37 2005
Thread PID:3193 finished with message:No such file or directory
Thread PID:3194 finished with message:No such file or directory
I am programm#2, I wait 2 sec
Thread PID:3191 finished with message:Success
Thread PID:3192 finished with message:Success
WIFEXITED(status)
не равно нулю, если дочерний процесс нормально
завершился.
WEXITSTATUS(status)
возвращает восемь младших битов возвращаемого
значения завершившегося дочернего процесса. Эти
биты могли быть установлены в аргументе функции
exit() или в аргументе оператора return в функции
main(). Этот макрос можно использовать, только
если WIFEXITED вернул ненулевое значение.
WIFSIGNALED(status)
возвращает истинное значение, если дочерний процесс
завершился из-за неперехваченного сигнала.
WTERMSIG(status)
возвращает номер сигнала, который привел к
завершению дочернего процесса. Этот макрос можно
использовать только если WIFSIGNALED вернул
ненулевое значение.
WIFSTOPPED(status)
возвращает истинное значение, если дочерний
процесс, из-за которого функция вернула управление,
в настоящий момент остановлен; это возможно только
если использовался флаг WUNTRACED.
WSTOPSIG(status)
возвращает номер сигнала, из-за которого дочерний
процесс был остановлен. Этот макрос можно
использовать только если WIFSTOPPED вернул
ненулевое значение.
Уважаемые коллеги! Предлагаем вам разработку программного обеспечения под ключ.
Опытные программисты сделают для вас мобильное приложение, нейронную сеть, систему искусственного интеллекта, SaaS-сервис, производственную систему, внедрят или разработают ERP/CRM, запустят стартап.
Сферы - промышленность, ритейл, производственные компании, стартапы, финансы и другие направления.
Языки программирования: Java, PHP, Ruby, C++, .NET, Python, Go, Kotlin, Swift, React Native, Flutter и многие другие.
Всегда на связи. Соблюдаем сроки. Предложим адекватную конкурентную цену.
Заходите к нам на сайт и пишите, с удовольствием вам во всем поможем.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.