这是我正在开发的源代码。我正在尝试使用信号进行字符串传输。我不想增加等待时间,所以我使用了pause()函数。当客户端发送信号时,它会暂停并等待服务器完成处理。然而,当反馈到来并且程序崩溃时,客户端不会继续。程序崩溃,退出代码为 138。我是否在暂停()方面犯了错误,或者这是一个不同的问题?
#define _DEFAULT_SOURCE
#define _XOPEN_SOURCE 700
#define WAIT_TIME 100
#include "libft.h"
#include "ft_printf.h"
#include <unistd.h>
#include <signal.h>
void send_signal(int pid, char *str)
{
int i;
while (*str)
{
i = (sizeof(char) * 8) - 1;
while (i >= 0)
{
if (*str & (1 << i))
kill(pid, SIGUSR1);
else
kill(pid, SIGUSR2);
pause();
//ft_printf("worked");
i--;
}
str++;
}
}
int main(int argc, char **argv)
{
int i;
int pid;
i = 0;
if (argc != 3)
{
ft_printf("Error: Wrong number of arguments.");
exit(EXIT_FAILURE);
}
while (argv[1][i])
{
if (!ft_isdigit(argv[1][i++]))
{
ft_printf("Error: Invalid process ID.");
exit(EXIT_FAILURE);
}
}
pid = ft_atoi(argv[1]);
ft_printf("%s, %d\n", argv[2], getpid());
send_signal(pid, argv[2]);
return (0);
}
#define _DEFAULT_SOURCE
#define _XOPEN_SOURCE 700
#define WAIT_TIME 100
#include "libft.h"
#include "ft_printf.h"
#include <unistd.h>
#include <signal.h>
void send_signal(int pid, char *str)
{
int i;
while (*str)
{
i = (sizeof(char) * 8) - 1;
while (i >= 0)
{
if (*str & (1 << i))
kill(pid, SIGUSR1);
else
kill(pid, SIGUSR2);
pause();
//ft_printf("worked");
i--;
}
str++;
}
}
int main(int argc, char **argv)
{
int i;
int pid;
i = 0;
if (argc != 3)
{
ft_printf("Error: Wrong number of arguments.");
exit(EXIT_FAILURE);
}
while (argv[1][i])
{
if (!ft_isdigit(argv[1][i++]))
{
ft_printf("Error: Invalid process ID.");
exit(EXIT_FAILURE);
}
}
pid = ft_atoi(argv[1]);
ft_printf("%s, %d\n", argv[2], getpid());
send_signal(pid, argv[2]);
return (0);
}
pause
函数不会自动为您处理信号。如果您在 pause
函数运行时收到尚未处理的信号,您的程序仍将终止。
您需要至少为您期望接收的信号显式添加信号处理程序。在您的特定情况下,处理程序不需要执行任何操作。然后,当信号处理程序返回时,这将允许
pause
函数返回。