Rust 锈封不允许访问外部数据

Rust 锈封不允许访问外部数据,rust,Rust,我正在努力实现一个生锈的外壳。我正在使用来处理SIGINT,我的目的是将接收到的SIGINT信号转发到shell中当前运行的进程(前台作业): 我如何才能最好地允许此闭包具有适当的生存期,以便能够访问结构数据(在本例中为前台作业pid)?如果您查看文档,set\u handler需要一个静态回调,这意味着回调必须能够永远存在 在这里,您的回调包含对self的引用,这意味着它不能比self更长寿('a),这绝对不是静态的' 解决此问题的最简单方法是只向回调传递“拥有的”数据,例如 modjobs;

我正在努力实现一个生锈的外壳。我正在使用来处理SIGINT,我的目的是将接收到的SIGINT信号转发到shell中当前运行的进程(前台作业):


我如何才能最好地允许此闭包具有适当的生存期,以便能够访问结构数据(在本例中为前台作业pid)?

如果您查看文档,
set\u handler
需要一个
静态
回调,这意味着回调必须能够永远存在

在这里,您的回调包含对
self
的引用,这意味着它不能比
self
更长寿(
'a
),这绝对不是静态的
'

解决此问题的最简单方法是只向回调传递“拥有的”数据,例如

modjobs;
结构KSH{
工作经理:Arc,
}

没有太多的上下文可供参考。但听起来这可能是一个使用或啊,我明白的情况。如果这是一个糟糕/愚蠢的问题,我很抱歉,但是为什么不变性需要同步原语呢?在这个实例中,所有内容都是单线程的。@user2489946在这种情况下,信号处理程序仍然可以相对于代码异步调用。
mod jobs;


struct KSH {
    jobManager: jobs::JobManager,
}

impl<'a> KSH {
    fn setupSignalHandlers(&'a mut self) {
        ctrlc::set_handler(move || {
            sys::signal::kill(unistd::Pid::from_raw(self.jobManager.getFgJob() as i32), sys::signal::Signal::SIGINT).expect("cannot send ctrl-c")
        })
        .expect("Error setting Ctrl-C handler");
    }
}
      
error[E0495]: cannot infer an appropriate lifetime due to conflicting requirements
  --> src/main.rs:55:28
   |
55 |   ...   ctrlc::set_handler(move || {
   |  __________________________^
56 | | ...       let pid = self.jobManager.getFgJob();
57 | | ...       sys::signal::kill(unistd::Pid::from_raw(self.jobManager.getFgJob() as i32), sys::signal::Signal::SIGINT).expect("cannot send ct...
58 | | ...   })
   | |_______^
   |