我正在尝试为正在运行的前台进程安装CTRL-Z (SIGTSTP)处理程序。
我在父进程中wait之前设置了处理程序(sigaction)。这是正确的地方吗?它似乎不能正常工作..
编辑:
我正在写一个shell。下面是我的代码的概要。我当前在父进程中设置了处理程序,如下所示(这似乎不起作用)。
// input from user for command to run
pid_t pid;
pid = fork();
// Child Process
if (pid == 0) {
// handle child stuff here
// exec() etc...
}
直截了当地谈到这个问题,我如何让Ctrl+z做标题声明的事情?
我的程序实现了一个父进程,它创建一个单独的子进程。两个进程都将显示进程ID,并且一旦子进程终止,一个信号被发送到父进程,父信号处理程序将显示一个文本,说明信号已被捕获。
在子进程上,在显示子进程ID的基础上,它必须在每次按Ctrl +z时生成10到50之间的随机数。到目前为止,我只能让子进程生成1个随机数。
下面是我的代码:
void main() {
int pid;
int x;
int fd[2];
const int MAXLINE=4096;
char line[MAXLINE];
当bash被直接通过内核选项init=/bin/bash --login作为pid 1调用时,它将在提示之前发出类似的命令:
bash: cannot set terminal process group (-1): Inappropriate ioctl for device
bash: no job control in this shell
和没有键盘产生的信号(例如^Z,^C,^)工作.。
为了解决这个问题,我编写了一个简单的程序init1.c,如下所示:
/* init1.c */
#include <stdio.h>
#include <unistd.h>
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
int pid = 0;
// some very time-consuming function
void childLabor() {
for (long long i=1;i<=10000000000;i++) {
//printf("i'm printing\n");
我正在为一个系统课程做一个shell实验室,我有一些非常奇怪的种族状况错误,从周五晚上开始我就一直试图解决这些问题,而且似乎无法确定。
我的当前代码:
START OF MY CODE之前和END OF MY CODE之后的一切都是由课程讲师提供的,所以所有这些都不应该是问题的来源。
我们还有一个测试脚本;下面是我当前测试结果的输出:
/*****************
* Signal handlers
*****************/
/*
* sigchld_handler - The kernel sends a SIGCHLD to the shell whenev
我有这样的代码:
pid_t vPid=fork();
int vStat;
switch(vPid){
case -1: perror("fork");
exit(1);
case 0:
//proces fiu
if(chdir("/var/code/p1")==0){
system("make clean");
system("make");
//limit on data
str